home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 1999 August / SGI Freeware 1999 August.iso / dist / fw_xemacs.idb / usr / freeware / lib / xemacs-20.4 / lisp / skk / skk.el.z / skk.el
Encoding:
Text File  |  1998-05-21  |  234.6 KB  |  5,359 lines

  1. ;; -*-byte-compile-dynamic: t;-*-
  2. ;;; skk.el --- SKK (Simple Kana to Kanji conversion program)
  3. ;; Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997
  4. ;; Masahiko Sato <masahiko@kuis.kyoto-u.ac.jp>
  5.  
  6. ;; Author: Masahiko Sato <masahiko@kuis.kyoto-u.ac.jp>
  7. ;; Maintainer: Murata Shuuichirou  <mrt@mickey.ai.kyutech.ac.jp>
  8. ;;             Mikio Nakajima <minakaji@osaka.email.ne.jp>
  9. ;; Version: $Id: skk.el,v 1.9 1997/10/25 11:26:11 mrt Exp $
  10. ;; Keywords: japanese
  11. ;; Last Modified: $Date: 1997/10/25 11:26:11 $
  12.  
  13. ;; This program is free software; you can redistribute it and/or modify
  14. ;; it under the terms of the GNU General Public License as published by
  15. ;; the Free Software Foundation; either versions 2, or (at your option)
  16. ;; any later version.
  17.  
  18. ;; This program is distributed in the hope that it will be useful
  19. ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
  20. ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  21. ;; GNU General Public License for more details.
  22.  
  23. ;; You should have received a copy of the GNU General Public License
  24. ;; along with SKK, see the file COPYING.  If not, write to the Free
  25. ;; Software Foundation Inc., 59 Temple Place - Suite 330, Boston,
  26. ;; MA 02111-1307, USA.
  27.  
  28. ;;; Commentary:
  29.  
  30. ;; Following people contributed modifications to skk.el (Alphabetical order):
  31. ;;      Chikanobu Toyofuku <unbound@papaya.juice.or.jp>
  32. ;;      FURUE Hideyuki <furue@kke.co.jp>
  33. ;;      GUNJI Takao <gunji@lisa.lang.osaka-u.ac.jp>
  34. ;;      Haru Mizuno <mizu@cs3.cs.oki.co.jp>
  35. ;;      Hideki Sakurada <sakurada@kuis.kyoto-u.ac.jp>
  36. ;;      Hisao Kuroda <kuroda@msi.co.jp>
  37. ;;      Hitoshi SUZUKI <h-suzuki@ael.fujitsu.co.jp>
  38. ;;      IIDA Yosiaki <iida@secom-sis.co.jp>
  39. ;;      Jun-ichi Nakamura <nakamura@pluto.ai.kyutech.ac.jp>
  40. ;;      Katuya Tomioka <tomioka@culle.l.chiba-u.ac.jp>
  41. ;;      Kazuo Hirokawa <hirokawa@rics.co.jp>
  42. ;;      Kazushi Marukawa <kazushi@kubota.co.jp>
  43. ;;      Kimura Chikahiro <kimura@oa1.kb.nec.co.jp>
  44. ;;      Kiyotaka Sakai <ksakai@netwk.ntt-at.co.jp>
  45. ;;      Koichi MORI <kmori@onsei2.rilp.m.u-tokyo.ac.jp>
  46. ;;      MINOURA Itsushi <minoura@uni.zool.s.u-tokyo.ac.jp>
  47. ;;      MIYOSHI Tsutomu <minkov@fuzzy.or.jp>
  48. ;;      Makoto MATSUSHITA <matusita@ics.es.osaka-u.ac.jp>
  49. ;;      Masahiko Suzuki <suzmasa@sm.sony.co.jp>
  50. ;;      Masahiro Doteguchi <xdote@rp.open.cs.fujitsu.co.jp>
  51. ;;      Masakazu Takahashi <masaka-t@ascii.co.jp>
  52. ;;      Masatake YAMATO <jet@airlab.cs.ritsumei.ac.jp>
  53. ;;      Mikio Nakajima <minakaji@osaka.email.ne.jp>
  54. ;;      Motohiko Mouri <mouri@jaist.ac.jp>
  55. ;;      Murata Shuuichirou <mrt@mickey.ai.kyutech.ac.jp>
  56. ;;      $BCfDE;3(B $B91(B <hisashi@rst.fujixerox.co.jp>
  57. ;;      NAMBA Seiich <pi9s-nnb@asahi-net.or.jp>
  58. ;;      Naoki HAMADA <nao@mimo.jaist-east.ac.jp>
  59. ;;      Ryoichi Hashimoto <gnu@ipri.go.jp>
  60. ;;      Sekita Daigo <sekita@mri.co.jp>
  61. ;;      $B?JF#M5;V(B <shindo@super.ees.saitama-u.ac.jp>
  62. ;;      Shuji Ashizawa <ashizawa@zuken.co.jp>
  63. ;;      Takeshi OHTANI <ohtani@iias.flab.fujitsu.co.jp>
  64. ;;      Tomoyuki Hiro <hiro@momo.it.okayama-u.ac.jp>
  65. ;       $BDS?"(B $B@5Bg(B (ma-tsuge@kdd.co.jp)
  66. ;;      Tsugutomo Enami <enami@ptgd.sony.co.jp>
  67. ;;      Wataru Matsui <matsui@atr-rd.atr.co.jp>
  68. ;;      Yoshida Toyonobu <toyono-y@is.aist-nara.ac.jp>
  69.  
  70. ;;; Change log:
  71.  
  72. ;;; Code:
  73. (require 'advice)
  74. ;; Elib 1.0 is required
  75. ;; queue-m.el and string.el are now distributed with SKK; this seems
  76. ;; to be the primary source for XEmacs
  77. (require 'queue-m)
  78. (require 'string)
  79. (require 'skk-foreword)
  80. (require 'skk-vars)
  81.  
  82. (defconst skk-version "10.38")
  83.  
  84. ;;;###skk-autoload
  85. (defconst skk-month-alist
  86.   '(("Jan" . "1") ("Feb" . "2") ("Mar" . "3") ("Apr" . "4") ("May" . "5")
  87.     ("Jun" . "6") ("Jul" . "7") ("Aug" . "8") ("Sep" . "9") ("Oct" . "10")
  88.     ("Nov" . "11") ("Dec" . "12") )
  89.   "$B1Q8l$N7nL>$H;;MQ?t;z$NO"A[%j%9%H!#(B
  90.  
  91. $B;;MQ?t;z$+$i1Q8l$N7nL>$N$_$r=PNO$9$k$N$G$"$l$P!"%Y%/%?!<$r;H$C$?J}$,9bB.$@$,!"(B
  92. $B1Q8l$N7nL>$+$i;;MQ?t;z$r=PNO$9$k$N$G$"$l$PO"A[%j%9%H$G$J$1$l$PL5M}$J$N$G!"B?(B
  93. $BL\E*$K;HMQ$G$-$k$h$&O"A[%j%9%H$N7ABV$r<h$k!#(B
  94.  
  95. Alist of English month abbreviations and numerical values.
  96.  
  97. Although it is faster to use a vector if we only want to output
  98. month abbreviations given the ordinal, without the alist it's
  99. unreasonable [sic] to output the ordinal given the abbreviation,
  100. so for multi-purpose utility we use the alist form."
  101. )
  102.  
  103. ;;;###skk-autoload
  104. (defun skk-version ()
  105.   (interactive)
  106.   (if (not (interactive-p))
  107.       skk-version
  108.     (save-match-data
  109.       (let* ((raw-date "$Date: 1997/10/25 11:26:11 $")
  110.              (year (substring raw-date 7 11))
  111.              (month (substring raw-date 12 14))
  112.              (date (substring raw-date 15 17)) )
  113.         (if (string-match "^0" month)
  114.             (setq month (substring month (match-end 0))) )
  115.         (if (string-match "^0" date)
  116.             (setq date (substring date (match-end 0))) )
  117.         (message "SKK version %s of %s"
  118.                  skk-version
  119.                  (concat (car (rassoc month skk-month-alist))
  120.                          " " date ", " year ))))))
  121.  
  122. ;;;; variables declaration
  123. ;;; user variables
  124. (defvar skk-debug nil)
  125.  
  126. ;;;###skk-autoload
  127. (defvar skk-init-file (if (eq system-type 'ms-dos) "~/_skk" "~/.skk")
  128.   "*SKK $B$N=i4|@_Dj%U%!%$%kL>!#(B
  129. skk.el 9.x $B$h$j(B ~/.emacs $B$G$N%+%9%?%^%$%:$,2DG=$H$J$C$?!#(B
  130.  
  131. Name of the SKK initialization file.
  132. From skk.el 9.x on all customization may be done in ~/.emacs."
  133. )
  134.  
  135. ;;;###skk-autoload
  136. (defvar skk-special-midashi-char-list '(?> ?< ??)
  137.   "*$B@\F,<-!"@\Hx<-$NF~NO$N$?$a$N%W%l%U%#%C%/%9%-!<!"%5%U%#%C%/%9%-!<$N%j%9%H!#(B
  138.  
  139. List of prefix and suffix keys for entering `setsutoji' and `setsuoji'."
  140. ;#SJT# What are `setsutoji' and `setsuoji'?
  141. )
  142.  
  143. ;#SJT# Is this hook also run in skk-auto-fill-mode?  Before or after?
  144. ;;;###skk-autoload
  145. (defvar skk-mode-hook nil
  146.   "*SKK $B$r5/F0$7$?$H$-$N%U%C%/!#(B
  147. $BB>$K!"(Bskk-auto-fill-mode-hook$B!"(Bskk-load-hook, skk-init-file $B$G$b%+%9%?(B
  148. $B%^%$%:$,2DG=!#(B
  149.  
  150. Hook run at SKK startup.
  151.  
  152. `skk-auto-fill-mode-hook', `skk-load-hook', and skk-init-file may also
  153. be used for customization."
  154. )
  155.  
  156. ;;;###skk-autoload
  157. (defvar skk-auto-fill-mode-hook nil
  158.   "*skk-auto-fill-mode $B$r5/F0$7$?$H$-$N%U%C%/!#(B
  159. $BB>$K!"(Bskk-mode-hook, skk-load-hook, skk-init-file $B$G$b%+%9%?%^%$%:$,2D(B
  160. $BG=!#(B
  161.  
  162. Hook run at startup of skk-auto-fill-mode.
  163.  
  164. `skk-mode-hook', `skk-load-hook', and `skk-init-file' may also be
  165. used for customization."
  166. )
  167.  
  168. ;;;###skk-autoload
  169. (defvar skk-load-hook nil
  170.   "*skk.el $B$r%m!<%I$7$?$H$-$N%U%C%/!#(B
  171. $BB>$K!"(Bskk-mode-hook, skk-auto-fill-mode-hook, skk-init-file $B$G$b%+%9%?(B
  172. $B%^%$%:$,2DG=!#(B
  173.  
  174. Hook run when SKK is loaded.
  175.  
  176. `skk-auto-fill-mode-hook', `skk-mode-hook', and `skk-init-file' may
  177. also be used for customization."
  178. )
  179.  
  180. ;;;###skk-autoload
  181. (defvar skk-kakutei-jisyo nil
  182.   "*$B:G=i$K8!:w$9$k<-=q!#(B
  183. Non-nil $B$G!"$+$D(B skk-search-prog-list $B$NMWAG$NCf$K$3$NJQ?t$,;HMQ$5$l$F$$$l$P!"(B
  184. $B;XDj$5$l$?<-=q$r8!:w$N$?$a%P%C%U%!$KFI$_9~$_!"8!:w$r9T$J$&!#(B
  185. $B8+=P$78l$O!"%=!<%H$5$l$F$$$J$1$l$P$J$i$J$$!#(B
  186. $B3F8+=P$78l$N:G=i$N%(%s%H%j$7$+8!:w$7$J$$(B ($BJ#?t$N%(%s%H%j$,$"$C$F$b(B 2 $BHVL\0J9_$N(B
  187. $B%(%s%H%j$OL5;k$5$l$k(B)$B!#(B
  188. skk-search-prog-list $B$NCM$r@_Dj$9$k$3$H$K$h$j!"8!:wBP>]$N<-=q$NJQ99!"8!:w$N=g(B
  189. $B=x$NJQ99$,2DG=!#(B
  190.  
  191. The first dictionary to be searched.
  192. If non-nil, and this variable is used as a component of
  193. `skk-search-prog-list', the indicated dictionary is read into a
  194. buffer and searched.
  195. The keys must be sorted.
  196. Only the first entry in each key is checked; if several entries are
  197. present the second and following entries are ignored.
  198. By setting the value of `skk-search-prog-list' the dictionaries
  199. searched and the order of search can be changed."
  200. )
  201.  
  202. ;;;###skk-autoload
  203. (defvar skk-initial-search-jisyo nil
  204.   "*$B%f!<%6!<<-=q$N8!:w$NA0$K8!:w$9$k<-=q!#(B
  205. $B8+=P$78l$O!"%=!<%H$5$l$F$$$J$1$l$P$J$i$J$$!#(B
  206. Non-nil $B$G!"$+$D(B skk-search-prog-list $B$NMWAG$NCf$K$3$NJQ?t$,;HMQ$5$l$F$$$l$P!"(B
  207. $B;XDj$5$l$?<-=q$r8!:w$N$?$a%P%C%U%!$KFI$_9~$_!"8!:w$r9T$J$&!#(B
  208. skk-search-prog-list $B$NCM$r@_Dj$9$k$3$H$K$h$j!"8!:wBP>]$N<-=q$NJQ99!"8!:w$N=g(B
  209. $B=x$NJQ99$,2DG=!#(B
  210.  
  211. This dictionary is searched before the user's personal dictionary.
  212. The keys must be sorted.
  213. If non-nil, and this variable is used as a component of
  214. `skk-search-prog-list', the indicated dictionary is read into a
  215. buffer and searched.
  216. By setting the value of `skk-search-prog-list' the dictionaries
  217. searched and the order of search can be changed."
  218. )
  219.  
  220. ;;;###skk-autoload
  221. (defvar skk-large-jisyo nil
  222.   "*$B%f!<%6!<<-=q$N8!:w$N8e$K8!:w$9$k<-=q!#(B
  223. $B8+=P$78l$O!"%=!<%H$5$l$F$$$J$1$l$P$J$i$J$$!#(B
  224. Non-nil $B$G!"$+$D(B skk-search-prog-list $B$NMWAG$NCf$K$3$NJQ?t$,;HMQ$5$l$F$$$l$P!"(B
  225. $B;XDj$5$l$?<-=q$r8!:w$N$?$a%P%C%U%!$KFI$_9~$_!"8!:w$r9T$J$&!#(B
  226. skk-search-prog-list $B$NCM$r@_Dj$9$k$3$H$K$h$j!"8!:wBP>]$N<-=q$NJQ99!"8!:w$N=g(B
  227. $B=x$NJQ99$,2DG=!#(B
  228.  
  229. Dictionary searched after the user dictionary.
  230. Keys must be sorted.
  231. If non-nil and this variable is used as a component of
  232. `skk-search-prog-list', the indicated dictionary is read into a buffer 
  233. for search, and the search is executed.
  234. By setting the value of `skk-search-prog-list' the dictionaries
  235. searched and the order of search can be changed."
  236. )
  237.  
  238. ;;;###skk-autoload
  239. (defvar skk-aux-large-jisyo nil
  240.   "*SKK $B%5!<%P!<$G:G8e$K8!:w$9$k<-=q!#(B
  241. $B8+=P$78l$O!"%=!<%H$5$l$F$$$J$1$l$P$J$i$J$$!#(B
  242. Non-nil $B$G!"$+$D(B skk-search-prog-list $B$NMWAG$NCf$K$3$NJQ?t$,;HMQ$5$l$F$$$l$P!"(B
  243. SKK $B%5!<%P!<$r;H$$8!:w$r9T$&!#(B
  244. SKK $B%5!<%P!<$,(B active $B$G$J$1$l$P!";XDj$5$l$?<-=q$r%P%C%U%!$KFI$_9~$`!#(B
  245. skk-search-prog-list $B$NCM$r@_Dj$9$k$3$H$K$h$j!"8!:wBP>]$N<-=q$NJQ99!"8!:w$N=g(B
  246. $B=x$NJQ99$,2DG=!#(B
  247. $B$3$NCM$r@_Dj$9$k$3$H$K$h$j!"(Bskk-server.el $B$,(B autoload $B$5$l$k!#(B
  248.  
  249. Last dictionary to be searched by the SKK server.
  250. Keys must be sorted.
  251.  
  252. If non-nil and this variable is used as a component of
  253. `skk-search-prog-list', the SKK server is used to execute the search.
  254. If the server is not active, the indicated dictionary is read into a
  255. buffer for search, and the search is executed.
  256. By setting the value of `skk-search-prog-list' the dictionaries
  257. searched and the order of search can be changed.
  258. According to the value of this variable the skkserv.el will be
  259. autoloaded."
  260. )
  261.  
  262. ;;;###skk-autoload
  263. (defvar skk-search-prog-list
  264.   '((skk-search-kakutei-jisyo-file skk-kakutei-jisyo 10000 t)
  265.     (skk-search-jisyo-file skk-initial-search-jisyo 10000 t)
  266.     (skk-search-jisyo-file skk-jisyo 0 t)
  267.     ;; skk-auto.el $B$r%m!<%I$9$k$H2<5-$NMWAG$,%W%i%9$5$l$k!#(B
  268.     ;;(skk-okuri-search)
  269.     (skk-search-jisyo-file skk-large-jisyo 10000)
  270.     ;; skk-server.el $B$r%m!<%I$9$k$H2<5-$NMWAG$,%W%i%9$5$l$k!#(B
  271.     ;;(skk-search-server skk-aux-large-jisyo 10000)
  272.     ;; skk-server-host $B$b$7$/$O(B skk-servers-list $B$r;XDj$9$k$H!"(Bskk-server.el 
  273.     ;; $B$,(B autoload $B$5$l$k!#(B
  274.     )
  275.   "*$B8!:w4X?t!"8!:wBP>]$N<-=q$r7hDj$9$k$?$a$N%j%9%H!#(B
  276. $BJQ49$7$?8uJd$rJV$9(B S $B<0$r%j%9%H$N7A$KI=5-$7$?$b$N!#(B
  277. skk-search $B4X?t$,(B skk-search-prog-list $B$N(B car $B$+$i8eJ}8~$X=gHV$K(B S $B<0$NI>2A$r(B
  278. $B9T$$JQ49$r9T$J$&!#(B
  279.  
  280. This list determines the search functions used and the dictionaries
  281. searched.
  282. A list of S-expressions returning conversion candidates.
  283. The function `skk-search' performs conversions by evaluating each S-
  284. expression in order, starting with the car of `skk-search-prog-list'."
  285. )
  286.  
  287. ;;;###skk-autoload
  288. (defvar skk-jisyo (if (eq system-type 'ms-dos) "~/_skk-jisyo" "~/.skk-jisyo")
  289.   "*SKK $B$N%f!<%6!<<-=q!#(B
  290.  
  291. SKK's dictionary of user-specified conversions." )
  292.  
  293. ;;;###skk-autoload
  294. (defvar skk-backup-jisyo
  295.   (if (eq system-type 'ms-dos) "~/_skk-jisyo.BAK" "~/.skk-jisyo.BAK")
  296.   "*SKK $B$N%f!<%6!<<-=q$N%P%C%/%"%C%W%U%!%$%k!#(B
  297.  
  298. Name of user dictionary backup (a file name as a string)."
  299. )
  300.  
  301. ;;;###skk-autoload
  302. (defvar skk-jisyo-code nil
  303.   "*Non-nil $B$G$"$l$P!"$=$NCM$G<-=q%P%C%U%!$N4A;z%3!<%I$r@_Dj$9$k!#(B
  304. Mule $B$G$O!"(B*euc-japan*, *sjis*, *junet*$B!#(B
  305. $B$^$?!"(B\"euc\", \"ujis\", \"sjis\", \"jis\" $B$J$I$NJ8;zNs$K$h$C$F$b;XDj$,(B
  306. $B2DG=!#(B
  307.  
  308. If non-nil, the value sets the kanji code used in dictionary buffers.
  309. In Mule, the symbols *euc-japan*, *sjis*, or *junet*.  Can also be
  310. specified as a string such as \"euc\", \"ujis\", \"sjis\", or \"jis\"."
  311. )
  312.  
  313. ;;;###skk-autoload
  314. (defvar skk-keep-record t
  315.   "*Non-nil $B$G$"$l$P!"JQ49$K4X$9$k5-O?$r(B skk-record-file $B$K<h$k!#(B
  316.  
  317. If non-nil, a record of conversions is kept in `skk-record-file'.")
  318.  
  319. ;;;###skk-autoload
  320. (defvar skk-record-file
  321.   (if (eq system-type 'ms-dos) "~/_skk-record" "~/.skk-record")
  322.   "*$B%f!<%6!<<-=q$NE}7W$r<h$k%U%!%$%k!#(B
  323. $B<-=q%;!<%V$N;~9o!"C18l$NEPO??t!"3NDj$r9T$C$?2s?t!"3NDjN(!"A4BN$N8l?t$N(B
  324. $B>pJs$r<}$a$k!#(B
  325.  
  326. File containing statistics about the user dictionary.
  327.  
  328. At the time the dictionary is saved, the number of words registered,
  329. number of conversions accepted, rate of acceptance, and the total
  330. number of words are collected." )
  331.  
  332. ;;;###skk-autoload
  333. (defvar skk-kakutei-key "\C-j"
  334.   "*$B3NDjF0:n(B (\"skk-kakutei\") $B$r9T$&%-!<!#(B
  335.  
  336. The key that executes conversion confirmation (\"skk-kakutei\").")
  337.  
  338. ;;;###skk-autoload
  339. (defvar skk-use-vip nil
  340.   "*Non-nil $B$G$"$l$P!"(BVIP $B$KBP1~$9$k!#(B
  341.  
  342. If non-nil, VIP compatibility mode." )
  343.  
  344. ;;;###skk-autoload
  345. (defvar skk-use-viper nil
  346.   "*Non-nil $B$G$"$l$P!"(BVIPER $B$KBP1~$9$k!#!#(B
  347.  
  348. If non-nil, VIPER compatibility mode." )
  349.  
  350. ;;;###skk-autoload
  351. (defvar skk-henkan-okuri-strictly nil
  352.   "*Non-nil $B$G$"$l$P!"8+=P$78l$HAw$j2>L>$,0lCW$7$?$H$-$@$18uJd$H$7$F=PNO$9$k!#(B
  353. $BNc$($P!"2<5-$N$h$&$J<-=q%(%s%H%j$,!"(Bskk-jisyo \($B%W%i%$%Y!<%H<-=q(B\) $B$K$"$C$?>l9g$K(B
  354.  
  355.   \"$B$*$*(Bk /$BBg(B/$BB?(B/[$B$/(B/$BB?(B/]/[$B$-(B/$BBg(B/]/\"
  356.  
  357. \"$B"&$*$*(B*$B$/(B\" $B$rJQ49$7$?$H$-!"(B\"$BB?$/(B\" $B$N$_$r=PNO$7!"(B\"$BBg$/(B\" $B$r=PNO$7$J$$!#(B
  358.  
  359. SKK-JISYO.[SML] $B$NAw$j2>L>%(%s%H%j$O>e5-$N7A<0$K$J$C$F$$$J$$$N$G!"(Bskk-jisyo $B$N(B
  360. $BAw$j$"$j$N<-=q%(%s%H%j$,$3$N7A<0$N$b$N$r$"$^$j4^$s$G$$$J$$>l9g$O!"$3$N%*%W%7%g(B
  361. $B%s$r(B on $B$K$9$k$3$H$G!"$9$0$KC18lEPO?$KF~$C$F$7$^$&$N$GCm0U$9$k$3$H!#(B
  362.  
  363. skk-process-okuri-early $B$NCM$,(B nil $B$J$i$P>e5-$N7A<0$G(B skk-jisyo $B$,:n$i$l$k!#(B
  364.  
  365. Emacs 19 $B%Y!<%9$N(B Mule $B$J$i$P!"2<5-$N%U%)!<%`$rI>2A$9$k$3$H$G!"C18lEPO?$KF~$C(B
  366. $B$?$H$-$@$10l;~E*$K$3$N%*%W%7%g%s$r(B nil $B$K$9$k$3$H$,$G$-$k!#(B
  367.  
  368.     \(add-hook 'minibuffer-setup-hook
  369.               \(function
  370.                \(lambda \(\)
  371.                  \(if \(and \(boundp 'skk-henkan-okuri-strictly\)
  372.                           skk-henkan-okuri-strictly
  373.                           \(not \(eq last-command 'skk-purge-from-jisyo\)\) \)
  374.                      \(progn
  375.                        \(setq skk-henkan-okuri-strictly nil\)
  376.                        \(put 'skk-henkan-okuri-strictly 'temporary-nil t\) \)\)\)\)\)
  377.  
  378.     \(add-hook 'minibuffer-exit-hook
  379.               \(function
  380.                \(lambda \(\)
  381.                  \(if \(get 'skk-henkan-okuri-strictly 'temporary-nil\)
  382.                      \(progn
  383.                        \(put 'skk-henkan-okuri-strictly 'temporary-nil nil\)
  384.                        \(setq skk-henkan-okuri-strictly t\) \)\)\)\)\)
  385.  
  386. $B$3$N%*%W%7%g%sMxMQ;~$O!"(Bskk-process-okuri-early $B$NCM$O(B nil $B$G$J$1$l$P$J$i$J$$(B
  387. \($B%a%K%e!<%P!<(B $B$rMxMQ$7$F%+%9%?%^%$%:$7$?>l9g$O<+F0E*$KD4@0$5$l$k(B\)$B!#(B
  388.  
  389. If non-nil, only when the key and its inflected suffix are given
  390. together in the dictionary will they be output as a candidate.  For
  391. example, if the following entry is in `skk-jisyo' (the provate
  392. dictionary),
  393.  
  394.   \"$B$*$*(Bk /$BBg(B/$BB?(B/[$B$/(B/$BB?(B/]/[$B$-(B/$BBg(B/]/\"
  395.  
  396. then when converting \"$B"&$*$*(B*$B$/(B\", only \"$BB?$/(B\" wil be output; \"$BBg$/(B
  397. \" will not be offered as a candidate.
  398.  
  399. The inflected suffixes in SKK-JISYO.[SML] are not given in the above
  400. way, so if very few of the entries in skk-jisyo are given in that
  401. form, then when this option is set `on', \"word registration mode\" will 
  402. be entered extremely often.
  403.  
  404. If the value of `skk-process-okuri-early' is `nil', new entries in
  405. `skk-jisyo' will be created in the form above.
  406.  
  407. If using a Mule based on Emacs 19 or later, you can arrange for this
  408. option to be temporarily set to `nil' by evaluating the following
  409. form:
  410.  
  411.     \(add-hook 'minibuffer-setup-hook
  412.               \(function
  413.                \(lambda \(\)
  414.                  \(if \(and \(boundp 'skk-henkan-okuri-strictly\)
  415.                           skk-henkan-okuri-strictly
  416.                           \(not \(eq last-command 'skk-purge-from-jisyo\)\) \)
  417.                      \(progn
  418.                        \(setq skk-henkan-okuri-strictly nil\)
  419.                        \(put 'skk-henkan-okuri-strictly 'temporary-nil t\) \)\)\)\)\)
  420.  
  421.     \(add-hook 'minibuffer-exit-hook
  422.               \(function
  423.                \(lambda \(\)
  424.                  \(if \(get 'skk-henkan-okuri-strictly 'temporary-nil\)
  425.                      \(progn
  426.                        \(put 'skk-henkan-okuri-strictly 'temporary-nil nil\)
  427.                        \(setq skk-henkan-okuri-strictly t\) \)\)\)\)\)
  428.  
  429. When using this option, `skk-process-okuri-early' must be `nil'.
  430. (When using customize from the menubar this will automatically
  431. temporarily be set to `nil'.)" )
  432.  
  433. ;;;###skk-autoload
  434. (defvar skk-henkan-strict-okuri-precedence nil
  435.   "*Non-nil $B$G$"$l$P!"8+=P$78l$HAw$j2>L>$,0lCW$7$?8uJd$rM%@h$7$FI=<($9$k!#(B
  436. $BNc$($P!"2<5-$N$h$&$J<-=q%(%s%H%j$,!"(Bskk-jisyo \($B%W%i%$%Y!<%H<-=q(B\) $B$K$"$C$?>l9g$K(B
  437.  
  438.   \"$B$*$*(Bk /$BBg(B/$BB?(B/[$B$/(B/$BB?(B/]/[$B$-(B/$BBg(B/]/\"
  439.  
  440. \"$B"&$*$*(B*$B$/(B\" $B$rJQ49$7$?$H$-!"$^$:(B\"$BB?$/(B\" $B$r=PNO$7!"(B
  441. $B<!$K(B \"$BBg$/(B\" $B$r=PNO$9$k!#(B
  442.  
  443. \"$BBg$/(B\"$B$J$I$N8uJd$O$&$C$H$&$7$$$,!"$9$0$KC18lEPO?$K$O$$$C$F$7$^$&$N$b(B
  444. $B7y$J$R$H$K$*$9$9$a!#(B
  445.  
  446. $B$3$N%*%W%7%g%sMxMQ;~$O!"(Bskk-process-okuri-early $B$NCM$O(B nil $B$G$J$i$J$$!#(B
  447. $B$^$?(B skk-henkan-okuri-strictly $B$,(B non-nil $B$N$H$-$O!"$3$NJQ?t$OL5;k$5$l$k!#(B
  448. \($B%a%K%e!<%P!<(B $B$rMxMQ$7$F%+%9%?%^%$%:$7$?>l9g$O<+F0E*$KD4@0$5$l$k(B\)$B!#(B")
  449.  
  450. ;;;###skk-autoload
  451. (defvar skk-auto-okuri-process nil
  452.   "*Non-nil $B$G$"$l$P!"Aw$j2>L>ItJ,$r<+F0G'<1$7$FJQ49$r9T$&!#(B
  453. $BNc$($P!"(B
  454.  
  455.     \"Uresii (\"UreSii\" $B$G$O$J$/(B) -> $B4r$7$$(B\"
  456.  
  457. $B$N$h$&$KJQ49$5$l$k!#C"$7!"(Bskk-jisyo $B<-=q(B \($B%W%i%$%Y!<%H<-=q(B\) $B$,!"(B
  458.  
  459.     \"$B$&$l(Bs /$B4r(B/[$B$7(B/$B4r(B/]/\"
  460.  
  461. $B$N$h$&$J7A<0$K$J$C$F$$$k$3$H$,I,MW$G$"$k(B \(SKK-JISYO.[SML] $B$O$3$N7A<0$KBP1~$7(B
  462. $B$F$$$J$$$N$G!"(Bskk-jisyo $B$K$3$N%(%s%H%j$,$J$1$l$P$J$i$J$$(B\)$B!#(B
  463.  
  464. $B$3$N%*%W%7%g%sMxMQ;~$O!"(Bskk-process-okuri-early $B$NCM$O(B nil $B$G$J$1$l$P$J$i$J$$(B
  465. \($B%a%K%e!<%P!<(B $B$rMxMQ$7$F%+%9%?%^%$%:$7$?>l9g$O<+F0E*$KD4@0$5$l$k(B\)$B!#(B" )
  466.  
  467. ;;;###skk-autoload
  468. (defvar skk-process-okuri-early nil
  469.   "*Non-nil $B$G$"$l$P!"Aw$j2>L>$N%m!<%^;z%W%l%U%#%C%/%9$NF~NO;~E@$GJQ49$r3+;O$9$k!#(B
  470. $BNc$($P!"(B
  471.  
  472.     \"UgoK -> $B"'F0(Bk\"$B!#(B
  473.  
  474. $BAw$j2>L>$,J,$i$J$$$^$^JQ49$7$F$$$k$3$H$K$J$k$N$G!"(Bskk-jisyo $B$,Aw$j2>L>$KBP1~$7(B
  475. $B$?7A$K@.D9$7$J$$!#$D$^$j(B
  476.  
  477.     \"$B$&$4(Bk /$BF0(B/\"
  478.  
  479. $B$N$h$&$J7ABV$N$^$^$H$J$k!#$?$@$7!"4{$K(B
  480.  
  481.     \"$B$&$4(Bk /$BF0(B/[$B$/(B/$BF0(B/]/[$B$+(B/$BF0(B/]/[$B$1(B/$BF0(B/]/[$B$-(B/$BF0(B/]/[$B$3(B/$BF0(B/]/\"
  482.  
  483. $B$N$h$&$J%(%s%H%j$,(B skk-jisyo $B$K$"$l$P!"$=$l$rGK2u$7$J$$!#(B
  484.  
  485. nil $B$G$"$l$P!"Aw$j2>L>$NF~NO$,40N;$7$?;~E@$GJQ49$,3+;O$9$k!#Nc$($P!"(B
  486.  
  487.     \"UgoK -> $B"&$&$4(B*k\", \"UgoKu -> $B"'F0$/(B\"
  488.  
  489. $B$3$N%*%W%7%g%s$r(B on $B$K$7$F(B skk-mode $B$r5/F0$9$k$H!"N>N)$G$-$J$$%*%W%7%g%s$G$"$k(B
  490. skk-kakutei-early, skk-auto-okuri-process, skk-henkan-okuri-strictly $B$O(B nil $B$K(B
  491. $B%;%C%H$5$l$k!#(B" )
  492.  
  493. ;;;###skk-autoload
  494. (defvar skk-egg-like-newline nil
  495.   "*Non-nil $B$G$"$l$P!""'%b!<%I$G2~9T$r%?%$%W$7$F$b3NDj$9$k$N$_$G2~9T$7$J$$!#(B" )
  496.  
  497. ;;;###skk-autoload
  498. (defvar skk-kakutei-early t
  499.   "*Non-nil $B$G$"$l$P(B skk-kana-input $B$,8F$P$l$?$H$-$K8=:_$N8uJd$r3NDj$9$k!#(B
  500. $BNc$($P!"(B
  501.  
  502.     \"$B"&$+$/$F$$(B -> $B"'3NDj(B -> $B3NDj(Bs -> $B3NDj$9(B\"
  503.  
  504. $B$N$h$&$KJQ498e!"!V$9!W$N(B prefix $B$G$"$k(B \"s\" $B$rF~NO$7$?;~E@$G3NDj$9$k!#(B
  505. nil $B$G$"$l$P!"Nc$($P(B
  506.  
  507.     \"$B"&$+$/$F$$(B -> $B"'3NDj(B -> $B"'3NDj(Bs -> $B"'3NDj$9$k(B -> $B3NDj$9$k!#(B\"
  508.  
  509. $B$N$h$&$K(B skk-kakutei $B$rD>@\!"4V@\$K%3!<%k$9$k$^$G(B \($B6gFIE@$rF~NO$7$?$j!"?7$?$J(B
  510. $B"&%b!<%I$KF~$C$?$j$9$k$H4V@\E*$K(B skk-kakutei $B$r%3!<%k$9$k(B\) $B$O!"3NDj$7$J$$$N$G!"(B
  511. $B$=$N4V$O!"JQ498uJd$rA*$S$J$*$9$3$H$J$I$,2DG=!#(B
  512.  
  513. $B$3$N%*%W%7%g%sMxMQ;~$O!"(Bskk-process-okuri-early $B$NCM$O(B nil $B$G$J$1$l$P$J$i$J$$(B
  514. \($B%a%K%e!<%P!<(B $B$rMxMQ$7$F%+%9%?%^%$%:$7$?>l9g$O<+F0E*$KD4@0$5$l$k(B\)$B!#(B" )
  515.  
  516. ;;;###skk-autoload
  517. (defvar skk-delete-implies-kakutei t
  518.   "*Non-nil $B$G$"$l$P!""'%b!<%I$G(B BS $B$r2!$9$H!"A0$N0lJ8;z$r:o=|$73NDj$9$k!#(B
  519. nil $B$G$"$l$P!"0l$DA0$N8uJd$rI=<($9$k!#(B")
  520.  
  521. ;;;###skk-autoload
  522. (defvar skk-allow-spaces-newlines-and-tabs t
  523.   "*Non-nil $B$G$"$l$P!"(Bskk-henkan-key $B$K%9%Z!<%9!"%?%V!"2~9T$,$"$C$F$bJQ492DG=!#(B
  524. $BNc$($P!"2<5-$N$h$&$K(B skk-henkan-key $B$NCf$K2~9T$,F~$C$F$$$F$bJQ49$,2DG=$G$"$k!#(B
  525.  
  526.      \"$B"&$+(B
  527.   $B$J(B\"
  528.    -> \"$B2>L>(B\"
  529.  
  530. $B$3$NCM$,(B nil $B$G$"$l$P!":G=i$N%9%Z!<%9$G(B skk-henkan-key $B$r@Z$j5M$a$F$7$^$$!"(B
  531. $B0J9_$N%9%Z!<%9!"%?%V!"2~9T$OL5;k$5$l$k!#(B
  532. $B$3$NCM$O!"(Bskk-start-henkan, skk-ascii-henkan, skk-katakana-henkan,
  533. skk-hiragana-henkan, skk-zenkaku-henkan $B5Z$S(B skk-backward-and-set-henkan-point
  534. $B$NF0:n$K1F6A$9$k!#(B")
  535.  
  536. ;;;###skk-autoload
  537. (defvar skk-convert-okurigana-into-katakana nil
  538.   "*Non-nil $B$G$"$l$P!"%+%?%+%J%b!<%I$GJQ49$7$?$H$-$KAw$j2>L>$b%+%?%+%J$KJQ49$9$k!#(B" )
  539.  
  540. ;;;###skk-autoload
  541. (defvar skk-delete-okuri-when-quit nil
  542.   "*Non-nil $B$G$"$l$P!"Aw$j$"$j$NJQ49Cf$K(B \"C-g\" $B$r2!$9$HAw$j2>L>$r>C$7"&%b!<%I$KF~$k!#(B
  543. $BNc$($P!"(B
  544.  
  545.     \"$B"&$J(B*$B$/(B -> $B"'5c$/(B -> \"C-g\" ->$B"&$J(B\"
  546.  
  547. nil $B$G$"$l$P!"Aw$j2>L>$r4^$a$?8+=P$78l$r$=$N$^$^;D$7!""#%b!<%I$KF~$k!#Nc$($P!"(B
  548.  
  549.     \"$B"&$J(B*$B$/(B -> $B"'5c$/(B -> \"C-g\" -> $B$J$/(B\"" )
  550.  
  551. ;;;###skk-autoload
  552. (defvar skk-henkan-show-candidates-keys '(?a ?s ?d ?f ?j ?k ?l)
  553.   "*$B%a%K%e!<7A<0$G8uJd$rA*Br$9$k$H$-$NA*Br%-!<$N%j%9%H!#(B
  554. \"x\", \" \" $B5Z$S(B \"C-g\" $B0J30$N(B 7 $B$D$N%-!<(B (char type) $B$r4^$`I,MW$,$"(B
  555. $B$k!#(B\"x\", \" \" $B5Z$S(B \"C-g\" $B$O8uJdA*Br;~$K$=$l$>$lFCJL$J;E;v$K3d$jEv(B
  556. $B$F$i$l$F$$$k$N$G!"$3$N%j%9%H$NCf$K$O4^$a$J$$$3$H!#(B")
  557.  
  558. ;;;###skk-autoload
  559. (defvar skk-ascii-mode-string " SKK"
  560.   "*SKK $B$,(B ascii $B%b!<%I$G$"$k$H$-$K%b!<%I%i%$%s$KI=<($5$l$kJ8;zNs!#(B" )
  561.  
  562. ;;;###skk-autoload
  563. (defvar skk-hirakana-mode-string " $B$+$J(B"
  564.   "*$B$R$i$,$J%b!<%I$G$"$k$H$-$K%b!<%I%i%$%s$KI=<($5$l$kJ8;zNs!#(B")
  565.  
  566. ;;;###skk-autoload
  567. (defvar skk-katakana-mode-string " $B%+%J(B"
  568.   "*$B%+%?%+%J%b!<%I$G$"$k$H$-$K%b!<%I%i%$%s$KI=<($5$l$kJ8;zNs!#(B")
  569.  
  570. ;;;###skk-autoload
  571. (defvar skk-zenkaku-mode-string " $BA41Q(B"
  572.   "*$BA41Q%b!<%I$G$"$k$H$-$K%b!<%I%i%$%s$KI=<($5$l$kJ8;zNs!#(B")
  573.  
  574. ;;;###skk-autoload
  575. (defvar skk-abbrev-mode-string " a$B$"(B"
  576.   "*SKK abbrev $B%b!<%I$G$"$k$H$-$K%b!<%I%i%$%s$KI=<($5$l$kJ8;zNs!#(B")
  577.  
  578. ;;;###skk-autoload
  579. (defvar skk-echo t
  580.   "*Non-nil $B$G$"$l$P!"2>L>J8;z$N%W%l%U%#%C%/%9$rI=<($9$k!#(B" )
  581.  
  582. ;;;###skk-autoload
  583. (defvar skk-use-numeric-conversion t
  584.   "*Non-nil $B$G$"$l$P!"?tCMJQ49$r9T$&!#(B" )
  585.  
  586. ;;;###skk-autoload
  587. (defvar skk-char-type-vector
  588.   [0 0 0 0 0 0 0 0
  589.    5 0 0 0 0 0 0 0
  590.    0 0 0 0 0 0 0 0
  591.    0 0 0 0 0 0 0 0
  592.    0 0 0 0 0 0 0 0
  593.    0 0 0 0 0 0 0 0
  594.    0 0 0 0 0 0 0 0
  595.    0 0 0 0 0 0 0 0
  596.    0 4 4 4 4 4 4 4
  597.    4 4 4 4 0 4 4 4
  598.    4 0 4 4 4 4 4 4
  599.    0 4 4 0 0 0 0 0
  600.    0 3 1 1 1 3 1 1
  601.    1 3 1 1 0 1 2 3
  602.    1 0 1 1 1 3 1 1
  603.    2 1 1 0 0 0 0 5]
  604.   "*skk-kana-input $B$G;2>H$9$k$+$JJ8;zJQ49$N$?$a$N(B char type $B%Y%/%?!<!#(B
  605. $B3FMWAG$N?t;z$N0UL#$O2<5-$NDL$j!#(B
  606.  
  607. 0 $B%m!<%^J8;z$h$j$+$JJ8;z$X$NJQ49$rCf;_$9$k(B ($B8=:_$N$H$3$m;HMQ$7$F$$$J$$(B)$B!#(B
  608. 1 $BB%2;$N0lItJ,$H$J$jF@$k;R2;!#(B
  609. 2 $B>e5-(B 1 $B0J30$N;R2;(B (n, x)
  610. 3 $BJl2;(B
  611. 4 skk-mode $B$G!"(Bskk-set-henkan-point $B$K3d$jIU$1$i$l$F$$$kJ8;z!#(B
  612. 5 $B%W%l%U%#%C%/%9$r>C5n$9$k(B" )
  613.  
  614. ;;;###skk-autoload
  615. (defvar skk-standard-rom-kana-rule-list
  616.   '(("b" "b" nil) ("by" "by" nil)
  617.     ("c" "c" nil) ("ch" "ch" nil) ("cy" "cy" nil)
  618.     ("d" "d" nil) ("dh" "dh" nil)
  619.     ("dy" "dy" nil)
  620.     ("f" "f" nil) ("fy" "fy" nil)
  621.     ("g" "g" nil) ("gy" "gy" nil)
  622.     ("h" "h" nil) ("hy" "hy" nil)
  623.     ("j" "j" nil) ("jy" "jy" nil)
  624.     ("k" "k" nil) ("ky" "ky" nil)
  625.     ("m" "m" nil) ("my" "my" nil)
  626.     ("n" "n" nil) ("ny" "ny" nil)
  627.     ("p" "p" nil) ("py" "py" nil)
  628.     ("r" "r" nil) ("ry" "ry" nil)
  629.     ("s" "s" nil) ("sh" "sh" nil)
  630.     ("sy" "sy" nil)
  631.     ("t" "t" nil) ("th" "th" nil)
  632.     ("ts" "ts" nil) ("ty" "ty" nil)
  633.     ("v" "v" nil) ("w" "w" nil)
  634.     ("x" "x" nil) ("xk" "xk" nil) ("xt" "xt" nil)
  635.     ("xw" "xw" nil) ("xy" "xy" nil)
  636.     ("y" "y" nil)
  637.     ("z" "z" nil) ("zy" "zy" nil)
  638.  
  639.     ("bb" "b" ("$B%C(B" . "$B$C(B"))
  640.     ("cc" "c" ("$B%C(B" . "$B$C(B"))
  641.     ("dd" "d" ("$B%C(B" . "$B$C(B"))
  642.     ("ff" "f" ("$B%C(B" . "$B$C(B"))
  643.     ("gg" "g" ("$B%C(B" . "$B$C(B"))
  644.     ("hh" "h" ("$B%C(B" . "$B$C(B"))
  645.     ("jj" "j" ("$B%C(B" . "$B$C(B"))
  646.     ("kk" "k" ("$B%C(B" . "$B$C(B"))
  647.     ("mm" "m" ("$B%C(B" . "$B$C(B"))
  648.     ;;("nn" "n" ("$B%C(B" . "$B$C(B"))
  649.     ("pp" "p" ("$B%C(B" . "$B$C(B"))
  650.     ("rr" "r" ("$B%C(B" . "$B$C(B"))
  651.     ("ss" "s" ("$B%C(B" . "$B$C(B"))
  652.     ("tt" "t" ("$B%C(B" . "$B$C(B"))
  653.     ("vv" "v" ("$B%C(B" . "$B$C(B"))
  654.     ("ww" "w" ("$B%C(B" . "$B$C(B"))
  655.     ("xx" "x" ("$B%C(B" . "$B$C(B"))
  656.     ("yy" "y" ("$B%C(B" . "$B$C(B"))
  657.     ("zz" "z" ("$B%C(B" . "$B$C(B"))
  658.  
  659.     ("a" nil ("$B%"(B" . "$B$"(B"))
  660.     ("ba" nil ("$B%P(B" . "$B$P(B")) ("bya" nil ("$B%S%c(B" . "$B$S$c(B"))
  661.     ("cha" nil ("$B%A%c(B" . "$B$A$c(B")) ("cya" nil ("$B%A%c(B" . "$B$A$c(B"))
  662.     ("da" nil ("$B%@(B" . "$B$@(B")) ("dha" nil ("$B%G%c(B" . "$B$G$c(B"))
  663.     ("dya" nil ("$B%B%c(B" . "$B$B$c(B"))
  664.     ("fa" nil ("$B%U%!(B" . "$B$U$!(B")) ("fya" nil ("$B%U%c(B" . "$B$U$c(B"))
  665.     ("ga" nil ("$B%,(B" . "$B$,(B")) ("gya" nil ("$B%.%c(B" . "$B$.$c(B"))
  666.     ("ha" nil ("$B%O(B" . "$B$O(B")) ("hya" nil ("$B%R%c(B" . "$B$R$c(B"))
  667.     ("ja" nil ("$B%8%c(B" . "$B$8$c(B")) ("jya" nil ("$B%8%c(B" . "$B$8$c(B"))
  668.     ("ka" nil ("$B%+(B" . "$B$+(B")) ("kya" nil ("$B%-%c(B" . "$B$-$c(B"))
  669.     ("ma" nil ("$B%^(B" . "$B$^(B")) ("mya" nil ("$B%_%c(B" . "$B$_$c(B"))
  670.     ("na" nil ("$B%J(B" . "$B$J(B")) ("nya" nil ("$B%K%c(B" . "$B$K$c(B"))
  671.     ("pa" nil ("$B%Q(B" . "$B$Q(B")) ("pya" nil ("$B%T%c(B" . "$B$T$c(B"))
  672.     ("ra" nil ("$B%i(B" . "$B$i(B")) ("rya" nil ("$B%j%c(B" . "$B$j$c(B"))
  673.     ("sa" nil ("$B%5(B" . "$B$5(B")) ("sha" nil ("$B%7%c(B" . "$B$7$c(B"))
  674.     ("sya" nil ("$B%7%c(B" . "$B$7$c(B"))
  675.     ("ta" nil ("$B%?(B" . "$B$?(B")) ("tha" nil ("$B%F%!(B" . "$B$F$!(B"))
  676.     ("tya" nil ("$B%A%c(B" . "$B$A$c(B"))
  677.     ("va" nil ("$B%t%!(B" . "$B$&!+$!(B")) ("wa" nil ("$B%o(B" . "$B$o(B"))
  678.     ("xa" nil ("$B%!(B" . "$B$!(B")) ("xka" nil ("$B%u(B" . "$B$+(B"))
  679.     ("xwa" nil ("$B%n(B" . "$B$n(B")) ("xya" nil ("$B%c(B" . "$B$c(B"))
  680.     ("ya" nil ("$B%d(B" . "$B$d(B"))
  681.     ("za" nil ("$B%6(B" . "$B$6(B")) ("zya" nil ("$B%8%c(B" . "$B$8$c(B"))
  682.  
  683.     ("i" nil ("$B%$(B" . "$B$$(B"))
  684.     ("bi" nil ("$B%S(B" . "$B$S(B")) ("byi" nil ("$B%S%#(B" . "$B$S$#(B"))
  685.     ("chi" nil ("$B%A(B" . "$B$A(B")) ("cyi" nil ("$B%A%#(B" . "$B$A$#(B"))
  686.     ("di" nil ("$B%B(B" . "$B$B(B")) ("dhi" nil ("$B%G%#(B" . "$B$G$#(B"))
  687.     ("dyi" nil ("$B%B%#(B" . "$B$B$#(B"))
  688.     ("fi" nil ("$B%U%#(B" . "$B$U$#(B")) ("fyi" nil ("$B%U%#(B" . "$B$U$#(B"))
  689.     ("gi" nil ("$B%.(B" . "$B$.(B")) ("gyi" nil ("$B%.%#(B" . "$B$.$#(B"))
  690.     ("hi" nil ("$B%R(B" . "$B$R(B")) ("hyi" nil ("$B%R%#(B" . "$B$R$#(B"))
  691.     ("ji" nil ("$B%8(B" . "$B$8(B")) ("jyi" nil ("$B%8%#(B" . "$B$8$#(B"))
  692.     ("ki" nil ("$B%-(B" . "$B$-(B")) ("kyi" nil ("$B%-%#(B" . "$B$-$#(B"))
  693.     ("mi" nil ("$B%_(B" . "$B$_(B")) ("myi" nil ("$B%_%#(B" . "$B$_$#(B"))
  694.     ("ni" nil ("$B%K(B" . "$B$K(B")) ("nyi" nil ("$B%K%#(B" . "$B$K$#(B"))
  695.     ("pi" nil ("$B%T(B" . "$B$T(B")) ("pyi" nil ("$B%T%#(B" . "$B$T$#(B"))
  696.     ("ri" nil ("$B%j(B" . "$B$j(B")) ("ryi" nil ("$B%j%#(B" . "$B$j$#(B"))
  697.     ("si" nil ("$B%7(B" . "$B$7(B")) ("shi" nil ("$B%7(B" . "$B$7(B"))
  698.     ("syi" nil ("$B%7%#(B" . "$B$7$#(B"))
  699.     ("ti" nil ("$B%A(B" . "$B$A(B")) ("thi" nil ("$B%F%#(B" . "$B$F$#(B"))
  700.     ("tyi" nil ("$B%A%#(B" . "$B$A$#(B"))
  701.     ("vi" nil ("$B%t%#(B" . "$B$&!+$#(B")) ("wi" nil ("$B%&%#(B" . "$B$&$#(B"))
  702.     ("xi" nil ("$B%#(B" . "$B$#(B")) ("xwi" nil ("$B%p(B" . "$B$p(B"))
  703.     ("zi" nil ("$B%8(B" . "$B$8(B")) ("zyi" nil ("$B%8%#(B" . "$B$8$#(B"))
  704.  
  705.     ("u" nil ("$B%&(B" . "$B$&(B"))
  706.     ("bu" nil ("$B%V(B" . "$B$V(B")) ("byu" nil ("$B%S%e(B" . "$B$S$e(B"))
  707.     ("chu" nil ("$B%A%e(B" . "$B$A$e(B")) ("cyu" nil ("$B%A%e(B" . "$B$A$e(B"))
  708.     ("du" nil ("$B%E(B" . "$B$E(B")) ("dhu" nil ("$B%G%e(B" . "$B$G$e(B"))
  709.     ("dyu" nil ("$B%B%e(B" . "$B$B$e(B"))
  710.     ("fu" nil ("$B%U(B" . "$B$U(B")) ("fyu" nil ("$B%U%e(B" . "$B$U$e(B"))
  711.     ("gu" nil ("$B%0(B" . "$B$0(B")) ("gyu" nil ("$B%.%e(B" . "$B$.$e(B"))
  712.     ("hu" nil ("$B%U(B" . "$B$U(B")) ("hyu" nil ("$B%R%e(B" . "$B$R$e(B"))
  713.     ("ju" nil ("$B%8%e(B" . "$B$8$e(B")) ("jyu" nil ("$B%8%e(B" . "$B$8$e(B"))
  714.     ("ku" nil ("$B%/(B" . "$B$/(B")) ("kyu" nil ("$B%-%e(B" . "$B$-$e(B"))
  715.     ("mu" nil ("$B%`(B" . "$B$`(B")) ("myu" nil ("$B%_%e(B" . "$B$_$e(B"))
  716.     ("nu" nil ("$B%L(B" . "$B$L(B")) ("nyu" nil ("$B%K%e(B" . "$B$K$e(B"))
  717.     ("pu" nil ("$B%W(B" . "$B$W(B")) ("pyu" nil ("$B%T%e(B" . "$B$T$e(B"))
  718.     ("ru" nil ("$B%k(B" . "$B$k(B")) ("ryu" nil ("$B%j%e(B" . "$B$j$e(B"))
  719.     ("su" nil ("$B%9(B" . "$B$9(B")) ("shu" nil ("$B%7%e(B" . "$B$7$e(B"))
  720.     ("syu" nil ("$B%7%e(B" . "$B$7$e(B"))
  721.     ("tu" nil ("$B%D(B" . "$B$D(B")) ("thu" nil ("$B%F%e(B" . "$B$F$e(B"))
  722.     ("tsu" nil ("$B%D(B" . "$B$D(B")) ("tyu" nil ("$B%A%e(B" . "$B$A$e(B"))
  723.     ("vu" nil ("$B%t(B" . "$B$&!+(B")) ("wu" nil ("$B%&(B" . "$B$&(B"))
  724.     ("xu" nil ("$B%%(B" . "$B$%(B")) ("xtu" nil ("$B%C(B" . "$B$C(B"))
  725.     ("xtsu" nil ("$B%C(B" . "$B$C(B")) ("xyu" nil ("$B%e(B" . "$B$e(B"))
  726.     ("yu" nil ("$B%f(B" . "$B$f(B"))
  727.     ("zu" nil ("$B%:(B" . "$B$:(B")) ("zyu" nil ("$B%8%e(B" . "$B$8$e(B"))
  728.  
  729.     ("e" nil ("$B%((B" . "$B$((B"))
  730.     ("be" nil ("$B%Y(B" . "$B$Y(B")) ("bye" nil ("$B%S%'(B" . "$B$S$'(B"))
  731.     ("che" nil ("$B%A%'(B" . "$B$A$'(B")) ("cye" nil ("$B%A%'(B" . "$B$A$'(B"))
  732.     ("de" nil ("$B%G(B" . "$B$G(B")) ("dhe" nil ("$B%G%'(B" . "$B$G$'(B"))
  733.     ("dye" nil ("$B%B%'(B" . "$B$B$'(B"))
  734.     ("fe" nil ("$B%U%'(B" . "$B$U$'(B")) ("fye" nil ("$B%U%'(B" . "$B$U$'(B"))
  735.     ("ge" nil ("$B%2(B" . "$B$2(B")) ("gye" nil ("$B%.%'(B" . "$B$.$'(B"))
  736.     ("he" nil ("$B%X(B" . "$B$X(B")) ("hye" nil ("$B%R%'(B" . "$B$R$'(B"))
  737.     ("je" nil ("$B%8%'(B" . "$B$8$'(B")) ("jye" nil ("$B%8%'(B" . "$B$8$'(B"))
  738.     ("ke" nil ("$B%1(B" . "$B$1(B")) ("kye" nil ("$B%-%'(B" . "$B$-$'(B"))
  739.     ("me" nil ("$B%a(B" . "$B$a(B")) ("mye" nil ("$B%_%'(B" . "$B$_$'(B"))
  740.     ("ne" nil ("$B%M(B" . "$B$M(B")) ("nye" nil ("$B%K%'(B" . "$B$K$'(B"))
  741.     ("pe" nil ("$B%Z(B" . "$B$Z(B")) ("pye" nil ("$B%T%'(B" . "$B$T$'(B"))
  742.     ("re" nil ("$B%l(B" . "$B$l(B")) ("rye" nil ("$B%j%'(B" . "$B$j$'(B"))
  743.     ("se" nil ("$B%;(B" . "$B$;(B")) ("she" nil ("$B%7%'(B" . "$B$7$'(B"))
  744.     ("sye" nil ("$B%7%'(B" . "$B$7$'(B"))
  745.     ("te" nil ("$B%F(B" . "$B$F(B")) ("the" nil ("$B%F%'(B" . "$B$F$'(B"))
  746.     ("tye" nil ("$B%A%'(B" . "$B$A$'(B"))
  747.     ("ve" nil ("$B%t%'(B" . "$B$&!+$'(B")) ("we" nil ("$B%&%'(B" . "$B$&$'(B"))
  748.     ("xe" nil ("$B%'(B" . "$B$'(B")) ("xke" nil ("$B%v(B" . "$B$1(B"))
  749.     ("xwe" nil ("$B%q(B" . "$B$q(B"))
  750.     ("ye" nil ("$B%$%'(B" . "$B$$$'(B"))
  751.     ("ze" nil ("$B%<(B" . "$B$<(B")) ("zye" nil ("$B%8%'(B" . "$B$8$'(B"))
  752.  
  753.     ("o" nil ("$B%*(B" . "$B$*(B"))
  754.     ("bo" nil ("$B%\(B" . "$B$\(B")) ("byo" nil ("$B%S%g(B" . "$B$S$g(B"))
  755.     ("cho" nil ("$B%A%g(B" . "$B$A$g(B")) ("cyo" nil ("$B%A%g(B" . "$B$A$g(B"))
  756.     ("do" nil ("$B%I(B" . "$B$I(B")) ("dho" nil ("$B%G%g(B" . "$B$G$g(B"))
  757.     ("dyo" nil ("$B%B%g(B" . "$B$B$g(B"))
  758.     ("fo" nil ("$B%U%)(B" . "$B$U$)(B")) ("fyo" nil ("$B%U%g(B" . "$B$U$g(B"))
  759.     ("go" nil ("$B%4(B" . "$B$4(B")) ("gyo" nil ("$B%.%g(B" . "$B$.$g(B"))
  760.     ("ho" nil ("$B%[(B" . "$B$[(B")) ("hyo" nil ("$B%R%g(B" . "$B$R$g(B"))
  761.     ("jo" nil ("$B%8%g(B" . "$B$8$g(B")) ("jyo" nil ("$B%8%g(B" . "$B$8$g(B"))
  762.     ("ko" nil ("$B%3(B" . "$B$3(B")) ("kyo" nil ("$B%-%g(B" . "$B$-$g(B"))
  763.     ("mo" nil ("$B%b(B" . "$B$b(B")) ("myo" nil ("$B%_%g(B" . "$B$_$g(B"))
  764.     ("no" nil ("$B%N(B" . "$B$N(B")) ("nyo" nil ("$B%K%g(B" . "$B$K$g(B"))
  765.     ("po" nil ("$B%](B" . "$B$](B")) ("pyo" nil ("$B%T%g(B" . "$B$T$g(B"))
  766.     ("ro" nil ("$B%m(B" . "$B$m(B")) ("ryo" nil ("$B%j%g(B" . "$B$j$g(B"))
  767.     ("so" nil ("$B%=(B" . "$B$=(B")) ("sho" nil ("$B%7%g(B" . "$B$7$g(B"))
  768.     ("syo" nil ("$B%7%g(B" . "$B$7$g(B"))
  769.     ("to" nil ("$B%H(B" . "$B$H(B")) ("tho" nil ("$B%F%g(B" . "$B$F$g(B"))
  770.     ("tyo" nil ("$B%A%g(B" . "$B$A$g(B"))
  771.     ("vo" nil ("$B%t%)(B" . "$B$&!+$)(B")) ("wo" nil ("$B%r(B" . "$B$r(B"))
  772.     ("xo" nil ("$B%)(B" . "$B$)(B")) ("xyo" nil ("$B%g(B" . "$B$g(B"))
  773.     ("yo" nil ("$B%h(B" . "$B$h(B"))
  774.     ("zo" nil ("$B%>(B" . "$B$>(B")) ("zyo" nil ("$B%8%g(B" . "$B$8$g(B"))
  775.  
  776.     ("nn" nil ("$B%s(B" . "$B$s(B"))
  777.     ("n'" nil ("$B%s(B" . "$B$s(B"))
  778.  
  779.     ("z/" nil ("$B!&(B" . "$B!&(B")) ("z," nil ("$B!E(B" . "$B!E(B"))
  780.     ("z." nil ("$B!D(B" . "$B!D(B")) ("z-" nil ("$B!A(B" . "$B!A(B"))
  781.     ("zh" nil ("$B"+(B" . "$B"+(B")) ("zj" nil ("$B"-(B" . "$B"-(B"))
  782.     ("zk" nil ("$B",(B" . "$B",(B")) ("zl" nil ("$B"*(B" . "$B"*(B"))
  783.     ("z[" nil ("$B!X(B" . "$B!X(B")) ("z]" nil ("$B!Y(B" . "$B!Y(B")) )
  784.   "SKK $B$NI8=`$N%m!<%^;z$+$JJQ49$N%*!<%H%^%H%s$N>uBVA+0\5,B'!#(B
  785. $B%j%9%H$N3FMWAG$O!"(B\($B8=:_$N>uBV(B@$BF~NO(B $B<!$N>uBV(B $B=PNO(B\) \($BC"$7!"(B\"@\" $B$OO"@\(B\) $B$r0UL#(B
  786. $B$9$k!#(B
  787. $B%7%9%F%`MQ$J$N$G%+%9%?%^%$%:$K$O(B skk-rom-kana-rule-list $B$rMxMQ$7$F$/$@$5$$!#(B" )
  788.  
  789. ;;;###skk-autoload
  790. (defvar skk-rom-kana-rule-list
  791.   nil
  792.   "*$B%m!<%^;z$+$JJQ49$N%*!<%H%^%H%s$N>uBVA+0\5,B'!#(B
  793. $B%j%9%H$N3FMWAG$O!"(B\($B8=:_$N>uBV(B@$BF~NO(B $B<!$N>uBV(B $B=PNO(B\) \($BC"$7!"(B\"@\" $B$OO"@\(B\) $B$r0UL#(B
  794. $B$9$k!#%+%9%?%^%$%:$K$O(B skk-standard-rom-kana-rule-list $B$G$OL5$/!"(B
  795. $B$3$A$i$rMxMQ$7$F$/$@$5$$!#(B" )
  796.  
  797. ;;;###skk-autoload
  798. (defvar skk-fallback-rule-alist
  799.   '(("n" "$B%s(B" . "$B$s(B"))
  800.   "*$B%m!<%^;z$+$JJQ49;~$K!"(Bskk-rom-kana-rule-list, skk-standard-rom-kana-rule-list $B$N(B
  801. $B$"$H$K;2>H$5$l$k5,B'!#(B
  802. $B%j%9%H$N3FMWAG$O!"(B\($B8=:_$N>uBV(B $B=PNO(B\) $B$r0UL#$9$k!#(B
  803. $B$3$N5,B'$,E,MQ$5$l$?>l9g!"F~NO$O%9%H%j!<%`$KJV$5$l$k!#(B" )
  804.  
  805. ;;;###skk-autoload
  806. (defvar skk-postfix-rule-alist
  807.   '(("oh" "$B%*(B" . "$B$*(B"))
  808.   "*$B%m!<%^;z$+$JJQ49;~$K!"D>A0$N$+$JJ8;z$r:n$k$N$KMQ$$$i$l$?:G8e$NF~NO$H(B
  809. $B8=:_$NF~NO$+$i$+$JJ8;z$r:n$j$@$9$?$a$N5,B'!#(B
  810. $B%j%9%H$N3FMWAG$O!"(B\($BD>A0$NF~NO(B@$BF~NO(B $B=PNO(B\) \($BC"$7!"(B\"@\" $B$OO"@\(B\) $B$r0UL#$9$k!#(B" )
  811.  
  812. ;;;###skk-autoload
  813. (defvar skk-previous-candidate-char
  814.   ?x
  815.   "*skk-previous-candidate $B$r3dEv$F$?%-%c%i%/%?!#(B" )
  816.  
  817. ;;;###skk-autoload
  818. (defvar skk-okuri-char-alist
  819.   nil
  820.   "*" )
  821.  
  822. ;;;###skk-autoload
  823. (defvar skk-downcase-alist
  824.   nil
  825.   "*" )
  826.  
  827. ;;;###skk-autoload
  828. (defvar skk-input-vector
  829.   [nil  nil  nil  nil  nil  nil  nil  nil  ;7
  830.    nil  nil  nil  nil  nil  nil  nil  nil  ;15
  831.    nil  nil  nil  nil  nil  nil  nil  nil  ;23
  832.    nil  nil  nil  nil  nil  nil  nil  nil  ;31
  833.    nil  "$B!*(B" nil  nil  nil  nil  nil  nil  ;39
  834.    nil  nil  nil  nil  "$B!"(B" "$B!<(B" "$B!#(B" nil  ;47
  835.    nil  nil  nil  nil  nil  nil  nil  nil  ;55
  836.    nil  nil  "$B!'(B" "$B!((B" nil  nil  nil  "$B!)(B" ;63
  837.    nil  nil  nil  nil  nil  nil  nil  nil  ;71
  838.    nil  nil  nil  nil  nil  nil  nil  nil  ;79
  839.    nil  nil  nil  nil  nil  nil  nil  nil  ;87
  840.    nil  nil  nil  "$B!V(B" nil  "$B!W(B" nil  nil  ;95
  841.    nil  nil  nil  nil  nil  nil  nil  nil  ;103
  842.    nil  nil  nil  nil  nil  nil  nil  nil  ;111
  843.    nil  nil  nil  nil  nil  nil  nil  nil  ;119
  844.    nil  nil  nil  nil  nil  nil  nil  nil] ;127
  845.   "*skk-self-insert $B$G;2>H$5$l$kJ8;z%F!<%V%k!#(B
  846. $B%-!<$KBP1~$9$k0LCV$KJ8;zNs$,$"$l$P!"$R$i$,$J%b!<%I$b$7$/$O%+%?%+%J%b!<%I$G!"3:(B
  847. $BEv$N%-!<$r2!$9$3$H$G!"BP1~$9$kJ8;z$,A^F~$5$l$k!#(B
  848. $BNc$($P!"(B\"~\" $B%-!<$KBP1~$7$F!"(B\"$B!A(B\" $B$rA^F~$5$;$k$h$&$KJQ99$7$?$1$l$P!"(Bskk.el 
  849. $B$N%m!<%I8e(B ($B$b$7$/$O(B skk-load-hook $B$rMxMQ$7$F(B)$B!"(B
  850.  
  851.   \(aset skk-input-vector 126 \"$B!A(B\"\)
  852.  
  853. $B$H$9$k$+!"$b$7$/$O!"(Bskk-input-vector $B$N(B 126 $BHVL\(B (0 $BHV$+$i?t$($F(B) $B$NCM$r(B
  854. \"$B!A(B\" $B$H$9$k$h$&$J(B skk-input-vector $B$rD>@\=q$-!"(Bsetq $B$GBeF~$9$k(B \(126 $B$O!"(B?
  855. { $B$rI>2A$7$?$H$-$NCM(B\)$B!#(B" )
  856.  
  857. ;;;###skk-autoload
  858. (defvar skk-zenkaku-vector
  859.   [nil  nil  nil  nil  nil  nil  nil  nil
  860.    nil  nil  nil  nil  nil  nil  nil  nil
  861.    nil  nil  nil  nil  nil  nil  nil  nil
  862.    nil  nil  nil  nil  nil  nil  nil  nil
  863.    "$B!!(B"  "$B!*(B" "$B!I(B" "$B!t(B" "$B!p(B" "$B!s(B" "$B!u(B" "$B!G(B"
  864.    "$B!J(B" "$B!K(B" "$B!v(B" "$B!\(B" "$B!$(B" "$B!](B" "$B!%(B" "$B!?(B"
  865.    "$B#0(B" "$B#1(B" "$B#2(B" "$B#3(B" "$B#4(B" "$B#5(B" "$B#6(B" "$B#7(B"
  866.    "$B#8(B" "$B#9(B" "$B!'(B" "$B!((B" "$B!c(B" "$B!a(B" "$B!d(B" "$B!)(B"
  867.    "$B!w(B" "$B#A(B" "$B#B(B" "$B#C(B" "$B#D(B" "$B#E(B" "$B#F(B" "$B#G(B"
  868.    "$B#H(B" "$B#I(B" "$B#J(B" "$B#K(B" "$B#L(B" "$B#M(B" "$B#N(B" "$B#O(B"
  869.    "$B#P(B" "$B#Q(B" "$B#R(B" "$B#S(B" "$B#T(B" "$B#U(B" "$B#V(B" "$B#W(B"
  870.    "$B#X(B" "$B#Y(B" "$B#Z(B" "$B!N(B" "$B!@(B" "$B!O(B" "$B!0(B" "$B!2(B"
  871.    "$B!F(B" "$B#a(B" "$B#b(B" "$B#c(B" "$B#d(B" "$B#e(B" "$B#f(B" "$B#g(B"
  872.    "$B#h(B" "$B#i(B" "$B#j(B" "$B#k(B" "$B#l(B" "$B#m(B" "$B#n(B" "$B#o(B"
  873.    "$B#p(B" "$B#q(B" "$B#r(B" "$B#s(B" "$B#t(B" "$B#u(B" "$B#v(B" "$B#w(B"
  874.    "$B#x(B" "$B#y(B" "$B#z(B" "$B!P(B" "$B!C(B" "$B!Q(B" "$B!A(B" nil]
  875.   "*skk-zenkaku-insert $B$G;2>H$5$l$kJ8;z%F!<%V%k!#(B
  876. $B%-!<$KBP1~$9$k0LCV$KJ8;zNs$,$"$l$P!"A41Q%b!<%I$G3:Ev$N%-!<$r2!$9$3$H$G!"BP1~$9(B
  877. $B$kJ8;z$,A^F~$5$l$k!#(B
  878. $BCM$NJQ99J}K!$K$D$$$F$O!"(Bskk-input-vector $B$r;2>H$N$3$H!#(B" )
  879.  
  880. ;;;###skk-autoload
  881. (defvar skk-use-face (or window-system (skk-terminal-face-p))
  882.   "*Non-nil $B$G$"$l$P!"(BEmacs 19 $B$N(B face $B$N5!G=$r;HMQ$7$FJQ49I=<($J$I$r9T$J$&!#(B" )
  883.  
  884. ;;;###skk-autoload
  885. (defvar skk-henkan-face
  886.   (if (and (or window-system (skk-terminal-face-p))
  887.            (or (and (fboundp 'frame-face-alist)
  888.             (assq 'highlight (frame-face-alist (selected-frame))))
  889.            (and (fboundp 'face-list)
  890.             (memq 'highlight (face-list)))) )
  891.       'highlight )
  892.   "*$BJQ498uJd$N(B face $BB0@-!#(Bskk-use-face $B$,(B non-nil $B$N$H$-$N$_M-8z!#(B
  893. Emacs $BI8=`%U%'%$%9$N(B default, modeline, region, secondary-selection,
  894. highlight, underline, bold, italic, bold-italic $B$NB>!"?7$?$K(B face $B$r:n$j;XDj$9(B
  895. $B$k$3$H$b2DG=!#(B
  896. $B?7$?$J(B face $B$r:n$j;XDj$9$k$K$O(B skk-make-face $B$rMxMQ$7$F!"(B
  897.  
  898.       \(skk-make-face 'DimGray/PeachPuff1\)
  899.       \(setq skk-henkan-face 'DimGray/PeachPuff1\)
  900.  
  901. $B$N$h$&$K$9$k$N$,<j7Z!#(Bforeground $B$H(B background $B$N?';XDj$@$1$G$J$$6E$C$?(B face
  902. $B$r:n$k>l9g$O!"(Bskk-make-face $B$G$OBP1~$G$-$J$$$N$G!"(BEmacs $B$N(B hilit19.el $B$N(B
  903. hilit-lookup-face-create $B$J$I$rMxMQ$9$k!#?'$rIU$1$k>l9g$NG[?'$O!"(Bcanna.el $B$N(B
  904. canna:attribute-alist $B$,NI$$Nc$+$b$7$l$J$$!#(B" )
  905.  
  906. ;;;###skk-autoload
  907. (defvar skk-use-color-cursor (and window-system
  908.                                       (fboundp 'x-display-color-p)
  909.                                       (x-display-color-p) )
  910.   "*Non-nil $B$G$"$l$P!"(BSKK $B%b!<%I$NF~NO%b!<%I$K1~$8$F%+!<%=%k$K?'$rIU$1$k!#(B")
  911.  
  912. (defvar skk-default-cursor-color
  913.   (if skk-xemacs
  914.       (frame-property (selected-frame) 'cursor-color)
  915.     (cdr (assq 'cursor-color (frame-parameters (selected-frame)))))
  916.   "*SKK $B$N%*%U$r<($9%+!<%=%k?'!#(B" )
  917.  
  918. ;; $BGX7J?'$r9u$K$7$F;HMQ$5$l$F$$$kJ}$G!"NI$$G[?'$,$"$l$P$*CN$i$;2<$5$$!#(B
  919. ;;;###skk-autoload
  920. (defvar skk-hirakana-cursor-color (if (eq skk-background-mode 'light)
  921.                                       "coral4"
  922.                                     "pink" )
  923.   "*$B$+$J%b!<%I$r<($9%+!<%=%k?'!#(B" )
  924.  
  925. ;;;###skk-autoload
  926. (defvar skk-katakana-cursor-color (if (eq skk-background-mode 'light)
  927.                                           "forestgreen"
  928.                                         "green" )
  929.   "*$B%+%?%+%J%b!<%I$r<($9%+!<%=%k?'!#(B" )
  930.  
  931. ;;;###skk-autoload
  932. (defvar skk-zenkaku-cursor-color "gold"
  933.   "*$BA43Q1Q;z%b!<%I$r<($9%+!<%=%k?'!#(B" )
  934.  
  935. ;;;###skk-autoload
  936. (defvar skk-ascii-cursor-color (if (eq skk-background-mode 'light)
  937.                                        "ivory4"
  938.                                      "gray" )
  939.   "*$B%"%9%-!<%b!<%I$r<($9%+!<%=%k?'!#(B" )
  940.  
  941. ;;;###skk-autoload
  942. (defvar skk-abbrev-cursor-color "royalblue"
  943.   "*$B%"%9%-!<%b!<%I$r<($9%+!<%=%k?'!#(B" )
  944.  
  945. ;;;###skk-autoload
  946. (defvar skk-report-set-cursor-error t
  947.   "*Non-nil $B$G$"$l$P!"%+%i!<%^%C%W@Z$l$,5/$-$?>l9g!"%(%i!<%a%C%;!<%8$rI=<($9$k!#(B
  948. nil $B$G$"$l$P!"I=<($7$J$$!#(B" )
  949.  
  950. ;;;###skk-autoload
  951. (defvar skk-use-cursor-change t
  952.   "*Non-nil $B$G$"$l$P!"(BOvwrt $B%^%$%J!<%b!<%I;~$K%+!<%=%k$NI}$r=L$a$k!#(B" )
  953.  
  954. ;;;###skk-autoload
  955. (defvar skk-auto-insert-paren nil
  956.   "*Non-nil $B$G$"$l$P!"(B2 $B$D$NJ8;zNs$r$^$H$a$FA^F~$7!"$=$NJ8;zNs$N4V$K%+!<%=%k$r0\F0$9$k!#(B
  957. $BNc$($P!"(B\"$B!V(B\" $B$rF~NO$7$?$H$-$K(B \"$B!W(B\" $B$r<+F0E*$KA^F~$7!"N>$+$.$+$C$3$N4V$K(B
  958. $B%+!<%=%k$r0\F0$9$k!#(B
  959. $BA^F~$9$kJ8;zNs$O!"(Bskk-auto-paren-string-alist $B$G;XDj$9$k!#(B" )
  960.  
  961. ;;;###skk-autoload
  962. (defvar skk-auto-paren-string-alist
  963.   '(("$B!V(B" . "$B!W(B") ("$B!X(B" . "$B!Y(B") ("(" . ")") ("$B!J(B" . "$B!K(B")
  964.     ("{" . "}")("$B!P(B" . "$B!Q(B") ("$B!R(B" . "$B!S(B") ("$B!T(B" . "$B!U(B")
  965.     ("[" . "]") ("$B!N(B" . "$B!O(B") ("$B!L(B" . "$B!M(B") ("$B!Z(B" . "$B![(B")
  966.     ("\"" . "\"")("$B!H(B" . "$B!I(B")
  967.     ;; skk-special-midashi-char-list $B$NMWAG$K$J$C$F$$$kJ8;z$O!"(B
  968.     ;; skk-auto-paren-string-alist $B$K4^$a$F$b:o=|$5$l$k!#(B
  969.     ;;("<" . ">")
  970.     )
  971.   "*$B<+F0E*$KBP$K$J$kJ8;zNs$rF~NO$9$k$?$a$NO"A[%j%9%H!#(B
  972. car $B$NJ8;zNs$,A^F~$5$l$?$H$-$K(B cdr $B$NJ8;zNs$r<+F0E*$KA^F~$9$k!#(B" )
  973.  
  974. ;;;###skk-autoload
  975. (defvar skk-japanese-message-and-error nil
  976.   "*Non-nil $B$G$"$l$P!"(BSKK $B$N%a%C%;!<%8$H%(%i!<$rF|K\8l$GI=<($9$k!#(B
  977. nil $B$G$"$l$P!"1Q8l$GI=<($9$k!#(B" )
  978.  
  979. ;;;###skk-autoload
  980. (defvar skk-ascii-mode-map nil "*ASCII $B%b!<%I$N%-!<%^%C%W!#(B" )
  981. (or skk-ascii-mode-map
  982.   (let ((map (make-sparse-keymap)))
  983.     (define-key map skk-kakutei-key 'skk-kakutei)
  984.     (skk-define-menu-bar-map map)
  985.     (setq skk-ascii-mode-map map)))
  986.  
  987. ;;;###skk-autoload
  988. (defvar skk-j-mode-map nil "*$B$+$J%b!<%I$N%-!<%^%C%W!#(B" )
  989. (or skk-j-mode-map
  990.   (let ((map (make-sparse-keymap)))
  991.     (define-key map "!" 'skk-self-insert)
  992.     (define-key map "#" 'skk-self-insert)
  993.     (define-key map "$" 'skk-display-code-for-char-at-point)
  994.     (define-key map "%" 'skk-self-insert)
  995.     (define-key map "&" 'skk-self-insert)
  996.     (define-key map "'" 'skk-self-insert)
  997.     (define-key map "*" 'skk-self-insert)
  998.     (define-key map "+" 'skk-self-insert)
  999.     (define-key map "," 'skk-insert-comma)
  1000.     (define-key map "-" 'skk-self-insert)
  1001.     (define-key map "." 'skk-insert-period)
  1002.     (define-key map "/" 'skk-abbrev-mode)
  1003.     (define-key map "0" 'skk-self-insert)
  1004.     (define-key map "1" 'skk-self-insert)
  1005.     (define-key map "2" 'skk-self-insert)
  1006.     (define-key map "3" 'skk-self-insert)
  1007.     (define-key map "4" 'skk-self-insert)
  1008.     (define-key map "5" 'skk-self-insert)
  1009.     (define-key map "6" 'skk-self-insert)
  1010.     (define-key map "7" 'skk-self-insert)
  1011.     (define-key map "8" 'skk-self-insert)
  1012.     (define-key map "9" 'skk-self-insert)
  1013.     (define-key map ":" 'skk-self-insert)
  1014.     (define-key map ";" 'skk-self-insert)
  1015.     ;; "<", ">", "?" $B$N(B 3 $BJ8;z$O!"(Bskk-special-midashi-char-list $B$NCM$,%G%#%U%)%k(B
  1016.     ;; $B%H$N$^$^$G$"$l$P!"(Bskk-setup-special-midashi-char $B$K$h$j(B
  1017.     ;; skk-set-henkan-point $B$K:F3d$jIU$1$5$l$k$,!"@_Dj$K$h$j$3$l$i$NJ8;z$r;XDj$7(B
  1018.     ;; $B$J$$>l9g$O!"(Bskk-self-insert $B$H$7$FF0$/$N$,K>$^$7$$!#(B
  1019.     (define-key map "<" 'skk-self-insert)
  1020.     (define-key map "=" 'skk-self-insert)
  1021.     (define-key map ">" 'skk-self-insert)
  1022.     (define-key map "?" 'skk-self-insert)
  1023.     (define-key map "@" 'skk-today)
  1024.     (define-key map "A" 'skk-set-henkan-point)
  1025.     (define-key map "B" 'skk-set-henkan-point)
  1026.     (define-key map "C" 'skk-set-henkan-point)
  1027.     (define-key map "D" 'skk-set-henkan-point)
  1028.     (define-key map "E" 'skk-set-henkan-point)
  1029.     (define-key map "F" 'skk-set-henkan-point)
  1030.     (define-key map "G" 'skk-set-henkan-point)
  1031.     (define-key map "H" 'skk-set-henkan-point)
  1032.     (define-key map "I" 'skk-set-henkan-point)
  1033.     (define-key map "J" 'skk-set-henkan-point)
  1034.     (define-key map "K" 'skk-set-henkan-point)
  1035.     (define-key map "L" 'skk-zenkaku-mode)
  1036.     (define-key map "M" 'skk-set-henkan-point)
  1037.     (define-key map "N" 'skk-set-henkan-point)
  1038.     (define-key map "O" 'skk-set-henkan-point)
  1039.     (define-key map "P" 'skk-set-henkan-point)
  1040.     (define-key map "Q" 'skk-set-henkan-point-subr)
  1041.     (define-key map "R" 'skk-set-henkan-point)
  1042.     (define-key map "S" 'skk-set-henkan-point)
  1043.     (define-key map "T" 'skk-set-henkan-point)
  1044.     (define-key map "U" 'skk-set-henkan-point)
  1045.     (define-key map "V" 'skk-set-henkan-point)
  1046.     (define-key map "W" 'skk-set-henkan-point)
  1047.     (define-key map "X" 'skk-purge-from-jisyo)
  1048.     (define-key map "Y" 'skk-set-henkan-point)
  1049.     (define-key map "Z" 'skk-set-henkan-point)
  1050.     (define-key map "\ " 'skk-start-henkan)
  1051.     (define-key map "\"" 'skk-self-insert)
  1052.     (define-key map "\(" 'skk-self-insert)
  1053.     (define-key map "\)" 'skk-self-insert)
  1054.     ;;(define-key map "\177" 'skk-delete-backward-char)
  1055.     ;;(define-key map "\C-g" 'skk-keyboard-quit)
  1056.     ;;(define-key map "\C-m" 'skk-newline)
  1057.     (define-key map "\[" 'skk-self-insert)
  1058.     (define-key map "\\" 'skk-input-by-code-or-menu)
  1059.     (define-key map "\]" 'skk-self-insert)
  1060.     (or skk-use-vip
  1061.         (define-key map "\M-\ " 'skk-start-henkan-with-completion) )
  1062.     (or skk-use-vip
  1063.         (define-key map "\M-Q" 'skk-backward-and-set-henkan-point) )
  1064.     (define-key map "\t" 'skk-try-completion)
  1065.     (define-key map "\{" 'skk-self-insert)
  1066.     (define-key map "\}" 'skk-self-insert)
  1067.     (define-key map "^" 'skk-self-insert)
  1068.     (define-key map "_" 'skk-self-insert)
  1069.     (define-key map "`" 'skk-self-insert)
  1070.     (define-key map "a" 'skk-kana-input)
  1071.     (define-key map "b" 'skk-kana-input)
  1072.     (define-key map "c" 'skk-kana-input)
  1073.     (define-key map "d" 'skk-kana-input)
  1074.     (define-key map "e" 'skk-kana-input)
  1075.     (define-key map "f" 'skk-kana-input)
  1076.     (define-key map "g" 'skk-kana-input)
  1077.     (define-key map "h" 'skk-kana-input)
  1078.     (define-key map "i" 'skk-kana-input)
  1079.     (define-key map "j" 'skk-kana-input)
  1080.     (define-key map "k" 'skk-kana-input)
  1081.     (define-key map "l" 'skk-ascii-mode)
  1082.     (define-key map "m" 'skk-kana-input)
  1083.     (define-key map "n" 'skk-kana-input)
  1084.     (define-key map "o" 'skk-kana-input)
  1085.     (define-key map "p" 'skk-kana-input)
  1086.     (define-key map "q" 'skk-toggle-kana)
  1087.     (define-key map "r" 'skk-kana-input)
  1088.     (define-key map "s" 'skk-kana-input)
  1089.     (define-key map "t" 'skk-kana-input)
  1090.     (define-key map "u" 'skk-kana-input)
  1091.     (define-key map "v" 'skk-kana-input)
  1092.     (define-key map "w" 'skk-kana-input)
  1093.     (define-key map "x" 'skk-previous-candidate)
  1094.     (define-key map "y" 'skk-kana-input)
  1095.     (define-key map "z" 'skk-kana-input)
  1096.     (define-key map "|" 'skk-self-insert)
  1097.     (define-key map "~" 'skk-self-insert)
  1098.     (define-key map skk-kakutei-key 'skk-kakutei)
  1099.     (skk-define-menu-bar-map map)
  1100.     (setq skk-j-mode-map map)))
  1101.  
  1102. ;;;###skk-autoload
  1103. (defvar skk-zenkaku-mode-map nil "*$BA43Q%b!<%I$N%-!<%^%C%W!#(B" )
  1104. (or skk-zenkaku-mode-map
  1105.   (let ((map (make-sparse-keymap))
  1106.         (i 0) )
  1107.     (while (< i 128)
  1108.       (if (aref skk-zenkaku-vector i)
  1109.           (define-key map (char-to-string i) 'skk-zenkaku-insert) )
  1110.       (setq i (1+ i)) )
  1111.     (define-key map skk-kakutei-key 'skk-kakutei)
  1112.     (or skk-use-vip
  1113.         (define-key map "\M-Q" 'skk-backward-and-set-henkan-point) )
  1114.     (define-key map "\C-q" 'skk-ascii-henkan)
  1115.     (skk-define-menu-bar-map map)
  1116.     (setq skk-zenkaku-mode-map map)))
  1117.  
  1118. ;;;###skk-autoload
  1119. (defvar skk-abbrev-mode-map nil "*SKK abbrev $B%b!<%I$N%-!<%^%C%W!#(B" )
  1120. (or skk-abbrev-mode-map
  1121.   (let ((map (make-sparse-keymap)))
  1122.     (define-key map "," 'skk-abbrev-comma)
  1123.     (define-key map "." 'skk-abbrev-period)
  1124.     (define-key map "\ " 'skk-start-henkan)
  1125.     ;;(define-key map "\177" 'skk-delete-backward-char)
  1126.     ;;(define-key map "\C-g" 'skk-keyboard-quit)
  1127.     ;;(define-key map "\C-m" 'skk-newline)
  1128.     (define-key map "\C-q" 'skk-zenkaku-henkan)
  1129.     (or skk-use-vip
  1130.         (define-key map "\M-\ " 'skk-start-henkan-with-completion) )
  1131.     (define-key map "\t" 'skk-try-completion)
  1132.     (define-key map skk-kakutei-key 'skk-kakutei)
  1133.     (skk-define-menu-bar-map map)
  1134.     (setq skk-abbrev-mode-map map)))
  1135.  
  1136. ;;;###skk-autoload
  1137. (defvar skk-jisyo-save-count 50
  1138.   "*$B?tCM$G$"$l$P!"$=$N2s?t<-=q$,99?7$5$l$?$H$-$K<-=q$r<+F0E*$K%;!<%V$9$k!#(B
  1139.   nil $B$G$"$l$P!"<-=q$N%*!<%H%;!<%V$r9T$J$o$J$$!#(B" )
  1140.  
  1141. ;;;###skk-autoload
  1142. (defvar skk-byte-compile-init-file t
  1143.   "*Non-nil $B$G$"$l$P!"(Bskk-mode $B5/F0;~$K(B skk-init-file $B$r%P%$%H%3%s%Q%$%k$9$k!#(B
  1144. $B@53N$K8@$&$H!"(B
  1145.  
  1146.   (1)skk-init-file $B$r%P%$%H%3%s%Q%$%k$7$?%U%!%$%k$,$J$$$+!"(B
  1147.   (2)skk-init-file $B$H$=$N%P%$%H%3%s%Q%$%k:Q%U%!%$%k$rHf3S$7$F!"A0<T$NJ}$,?7$7(B
  1148.      $B$$$H$-(B
  1149.  
  1150. $B$K(B skk-init-file $B$r%P%$%H%3%s%Q%$%k$9$k!#(B
  1151. nil $B$G$"$l$P!"(Bskk-init-file $B$H$=$N%P%$%H%3%s%Q%$%k:Q$_%U%!%$%k$rHf3S$7$F(B 
  1152. skk-init-file $B$NJ}$,?7$7$$$H$-$O!"$=$N%P%$%H%3%s%Q%$%k:Q%U%!%$%k$r>C$9!#(B" )
  1153.  
  1154. ;;;###skk-autoload
  1155. (defvar skk-count-private-jisyo-candidates-exactly nil
  1156.   "*Non-nil $B$G$"$l$P!"(BEmacs $B$r=*N;$9$k$H$-$K@53N$K8D?M<-=q$N8uJd?t$r?t$($k!#(B
  1157. nil $B$G$"$l$P!"(B1 $B9T$KJ#?t$N8uJd$,$"$C$F$b(B 1 $B8uJd$H$7$F?t$($k!#(B
  1158. $B7W;;7k2L$O!"(Bskk-record-file $B$KJ]B8$5$l$k!#(B" )
  1159.  
  1160. ;;;###skk-autoload
  1161. (defvar skk-compare-jisyo-size-when-saving t
  1162.   "*Non-nil $B$G$"$l$P!"(Bskk-jisyo $B$N%;!<%V;~$K%U%!%$%k%5%$%:$N%A%'%C%/$r9T$J$&!#(B
  1163. $BA02s%;!<%V$7$?(B skk-jisyo $B$H:#2s%;!<%V$7$h$&$H$9$k<-=q$H$N%5%$%:Hf3S$r9T$J$$!"(B
  1164. $B8e<T$NJ}$,Bg$-$$$H$-$K%f!<%6!<$K%;!<%V$rB3$1$k$+$I$&$+$N3NG'$r5a$a$k!#(B" )
  1165.  
  1166. ;;;###skk-autoload
  1167. (defvar skk-auto-start-henkan t
  1168.   "$BC18l$dJ8@a$N6h@Z$j$r<($9J8;z$NBG80$K$h$j<+F0E*$KJQ49$r3+;O$9$k!#(B
  1169. skk-auto-start-henkan-keyword-list $B$K$h$jC18l$dJ8@a$N6h@Z$j$r<($9J8;z$r;XDj$9$k!#(B" )
  1170.  
  1171. ;;;###skk-autoload
  1172. (defvar skk-auto-start-henkan-keyword-list
  1173.   '("$B$r(B" "$B!"(B" "$B!#(B" "$B!%(B" "$B!$(B" "$B!)(B" "$B!W(B" "$B!*(B"
  1174.     "$B!((B" "$B!'(B" ")" ";" ":" "$B!K(B" "$B!I(B" "$B![(B" "$B!Y(B"
  1175.     "$B!U(B" "$B!S(B" "$B!Q(B" "$B!O(B" "$B!M(B" "}" "]" "?" "."
  1176.     "," "!" )
  1177. ;; $B$"$^$j%-!<%o!<%I$,B?$/$J$k$H!"DL>o$NJQ49$r:$Fq$K$9$k!)(B
  1178.   "$B<+F0JQ49$r3+;O$9$k%-!<%o!<%I!#(B
  1179. $B$3$N%j%9%H$NMWAG$NJ8;z$rA^F~$9$k$H!"(BSPC $B$r2!$9$3$H$J$/<+F0E*$KJQ49$r3+;O$9$k!#(B" )
  1180.  
  1181. ;;;###skk-autoload
  1182. (defvar skk-search-excluding-word-pattern-function nil
  1183.   "*$B8D?M<-=q$K<h$j9~$^$J$$J8;zNs$N%Q%?!<%s$r8!:w$9$k4X?t$r;XDj$9$k!#(B
  1184. $B3NDj$7$?J8;zNs$r0z?t$KEO$7$F(B funcall $B$5$l$k!#(B
  1185.  
  1186. SKK $B$G$OJQ49!"3NDj$r9T$J$C$?J8;zNs$OA4$F8D?M<-=q$K<h$j9~$^$l$k$,!"$3$NJQ?t$G;X(B
  1187. $BDj$5$l$?4X?t$,(B non-nil $B$rJV$9$H$=$NJ8;zNs$O8D?M<-=q$K<h$j9~$^$l$J$$!#Nc$($P!"(B
  1188. $B$3$NJQ?t$K2<5-$N$h$&$J;XDj$9$k$H!"(BSKK abbrev mode $B$G$NJQ49$r=|$-!"%+%?%+%J$N$_(B
  1189. $B$+$i$J$kJ8;zNs$rJQ49$K$h$jF@$F3NDj$7$F$b!"$=$l$r8D?M<-=q$K<h$j9~$^$J$$!#(B
  1190.  
  1191. $B%+%?%+%J$rJQ49$K$h$j5a$a$?$$$,!"8D?M<-=q$K$O%+%?%+%J$N$_$N8uJd$r<h$j9~$_$?$/$J(B
  1192. $B$$!"$J$I!"8D?M<-=q$,I,MW0J>e$KKD$l$k$N$rM^$($kL\E*$K;HMQ$G$-$k!#(B
  1193.  
  1194. $B8D?M<-=q$K<h$j9~$^$J$$J8;zNs$K$D$$$F$OJd40$,8z$+$J$$$N$G!"Cm0U$9$k$3$H!#(B
  1195.  
  1196.   \(setq skk-search-excluding-word-pattern-function
  1197.         \(function
  1198.          \(lambda \(kakutei-word\)
  1199.          ;; $B$3$N4X?t$,(B t $B$rJV$7$?$H$-$O!"$=$NJ8;zNs$O8D?M<-=q$K<h$j9~$^$l$J$$!#(B
  1200.            \(save-match-data
  1201.              \(and
  1202.             ;; $BAw$j$J$7JQ49$G!"(B
  1203.               \(not skk-okuri-char\)
  1204.             ;; $B3NDj8l$,%+%?%+%J$N$_$+$i9=@.$5$l$F$$$F!"(B
  1205.               \(string-match \"^[$B!<%!(B-$B%s(B]+$\" kakutei-word\)
  1206.             ;; SKK abbrev mode $B0J30$G$NJQ49$+!"(B
  1207.               \(or \(not skk-abbrev-mode\)
  1208.                 ;; $B8+=P$78l$,%+%?%+%J!"$R$i$,$J0J30$N$H$-!#(B
  1209.                 ;; \($B8e$G"&%^!<%/$rIU$1$?$H$-$O!"8+=P$78l$,1QJ8;z$G$b!"(B
  1210.                 ;; skk-abbrev-mode$B$,(B t $B$K$J$C$F$$$J$$(B\)$B!#(B
  1211.                   \(not \(string-match \"^[^$B!<%!(B-$B%s$!(B-$B$s(B]+$\" skk-henkan-key\)\) \)\)\)\)\)\) ")
  1212.  
  1213. ;;; -- internal variables
  1214. ;; ---- global variables
  1215. (defconst skk-ml-address "skk-develop@kuis.kyoto-u.ac.jp")
  1216.  
  1217. (defconst skk-coding-system-alist
  1218.   (if (or skk-mule3 skk-xemacs)
  1219.       '(("euc" . euc-japan)
  1220.         ("ujis" . euc-japan)
  1221.         ("sjis". sjis)
  1222.         ("jis" . junet) )
  1223.     '(("euc" . *euc-japan*)
  1224.       ("ujis" . *euc-japan*)
  1225.       ("sjis". *sjis*)
  1226.       ("jis" . *junet*) ))
  1227.   "coding-system $B$NJ8;zNsI=8=$H!"%7%s%\%kI=8=$NO"A[%j%9%H!#(B" )
  1228.  
  1229. (defconst skk-default-zenkaku-vector
  1230.   ;; note that skk-zenkaku-vector is a user variable.
  1231.   ;; skk.el $B%m!<%IA0$K(B .emacs $B$J$I$G!"(Bskk-zenkaku-vector $B$NJL$NCM$r%f!<%6!<$,(B
  1232.   ;; $BD>@\=q$$$?$j!"(Bskk.el $B%m!<%I8e$K$3$NCM$r(B aset $B$GD>@\$$$8$C$?$j$7$J$1$l$P(B
  1233.   ;; default-value $B$G(B skk-zenkaku-vector $B$K%"%/%;%9$9$k$3$H$G(B
  1234.   ;; skk-default-zenkaku-vector $B$NCM$rJ];}$9$k$3$H$b$G$-$h$&$,!"$=$l$OK>$a$J(B
  1235.   ;; $B$$(B...$B!#(B
  1236.   [nil  nil  nil  nil  nil  nil  nil  nil
  1237.    nil  nil  nil  nil  nil  nil  nil  nil
  1238.    nil  nil  nil  nil  nil  nil  nil  nil
  1239.    nil  nil  nil  nil  nil  nil  nil  nil
  1240.    "$B!!(B"  "$B!*(B" "$B!I(B" "$B!t(B" "$B!p(B" "$B!s(B" "$B!u(B" "$B!G(B"
  1241.    "$B!J(B" "$B!K(B" "$B!v(B" "$B!\(B" "$B!$(B" "$B!](B" "$B!%(B" "$B!?(B"
  1242.    "$B#0(B" "$B#1(B" "$B#2(B" "$B#3(B" "$B#4(B" "$B#5(B" "$B#6(B" "$B#7(B"
  1243.    "$B#8(B" "$B#9(B" "$B!'(B" "$B!((B" "$B!c(B" "$B!a(B" "$B!d(B" "$B!)(B"
  1244.    "$B!w(B" "$B#A(B" "$B#B(B" "$B#C(B" "$B#D(B" "$B#E(B" "$B#F(B" "$B#G(B"
  1245.    "$B#H(B" "$B#I(B" "$B#J(B" "$B#K(B" "$B#L(B" "$B#M(B" "$B#N(B" "$B#O(B"
  1246.    "$B#P(B" "$B#Q(B" "$B#R(B" "$B#S(B" "$B#T(B" "$B#U(B" "$B#V(B" "$B#W(B"
  1247.    "$B#X(B" "$B#Y(B" "$B#Z(B" "$B!N(B" "$B!@(B" "$B!O(B" "$B!0(B" "$B!2(B"
  1248.    "$B!F(B" "$B#a(B" "$B#b(B" "$B#c(B" "$B#d(B" "$B#e(B" "$B#f(B" "$B#g(B"
  1249.    "$B#h(B" "$B#i(B" "$B#j(B" "$B#k(B" "$B#l(B" "$B#m(B" "$B#n(B" "$B#o(B"
  1250.    "$B#p(B" "$B#q(B" "$B#r(B" "$B#s(B" "$B#t(B" "$B#u(B" "$B#v(B" "$B#w(B"
  1251.    "$B#x(B" "$B#y(B" "$B#z(B" "$B!P(B" "$B!C(B" "$B!Q(B" "$B!A(B" nil]
  1252.   "skk-zenkaku-region $B$G;2>H$9$kJ8;z%F!<%V%k!#(B
  1253. \"ascii\" -> \"$B#a#s#c#i#i(B\" $B$N$h$&$JA43QJ8;z$X$NJQ49$r9T$&:]$KMxMQ$9$k!#(B" )
  1254.  
  1255. ;;;###skk-autoload
  1256. (defconst skk-kanji-len (length "$B$"(B")
  1257.   "$B4A;z0lJ8;z$ND9$5!#(BMule $B$G$O(B 3 $B$K$J$k!#(BXEmacs $B$G$O(B 1$B!#(B" )
  1258.  
  1259. (defconst skk-hankaku-alist
  1260.   '((161 . 32) ; ?\ 
  1261.     (170 . 33) ;?\!
  1262.     (201 . 34) ;?\"
  1263.     (244 . 35) ;?\#
  1264.     (240 . 36) ;?\$
  1265.     (243 . 37) ;?\%
  1266.     (245 . 38) ;?\&
  1267.     (199 . 39) ;?\'
  1268.     (202 . 40) ;?\(
  1269.     (203 . 41) ;?\)
  1270.     (246 . 42) ;?\*
  1271.     (220 . 43) ;?\+
  1272.     (164 . 44) ;?\,
  1273.     (221 . 45) ;?\-
  1274.     (165 . 46) ;?\.
  1275.     (191 . 47) ;?\/
  1276.     (167 . 58) ;?\:
  1277.     (168 . 59) ;?\;
  1278.     (227 . 60) ;?\<
  1279.     (225 . 61) ;?\=
  1280.     (228 . 62) ;?\>
  1281.     (169 . 63) ;?\?
  1282.     (247 . 64) ;?\@
  1283.     (206 . 91) ;?\[
  1284.     (239 . 92) ;?\\
  1285.     (207 . 93) ;?\]
  1286.     (176 . 94) ;?^ 
  1287.     (178 . 95) ;?\_
  1288.     (208 . 123) ;?\{
  1289.     (195 . 124) ;?\|
  1290.     (209 . 125) ;?\}
  1291.     (177 . 126) ;?\~
  1292.     (198 . 96)) ;?` 
  1293.   "$BJ8;z%3!<%I$N(B 2 $BHVL\$N%P%$%H$H$=$NJ8;z$KBP1~$9$k(B ascii $BJ8;z(B \(char\) $B$H$NO"A[%j%9%H!#(B
  1294. skk-ascii-region $B$G;2>H$9$k!#(BMule-2.3 $BE:IU$N(B egg.el $B$h$j%3%T!<$7$?!#(B" )
  1295.  
  1296. ;;;###skk-autoload
  1297. (defvar skk-insert-new-word-function nil
  1298.   "$B8uJd$rA^F~$7$?$H$-$K(B funcall $B$5$l$k4X?t$rJ]B8$9$kJQ?t!#(B" )
  1299.  
  1300. ;;;###skk-autoload
  1301. (defvar skk-input-mode-string skk-hirakana-mode-string
  1302.   "SKK $B$NF~NO%b!<%I$r<($9J8;zNs!#(Bskk-mode $B5/F0;~$O!"(Bskk-hirakana-mode-string$B!#(B" )
  1303.  
  1304. ;;;###skk-autoload
  1305. (defvar skk-isearch-message nil
  1306.   "skk-isearch $B4X?t$r%3!<%k$9$k$?$a$N%U%i%0!#(B
  1307. Non-nil $B$G$"$l$P!"(Bskk-isearch-message $B4X?t$r%3!<%k$9$k!#(B" )
  1308.  
  1309. ;;;###skk-autoload
  1310. (defvar skk-mode-invoked nil
  1311.   "Non-nil $B$G$"$l$P!"(BEmacs $B$r5/F08e4{$K(B skk-mode $B$r5/F0$7$?$3$H$r<($9!#(B" )
  1312.  
  1313. (defvar skk-kakutei-count 0
  1314.   "$BJQ498uJd$r3NDj$7$?%+%&%s%H$rJ];}$9$kJQ?t!#(B
  1315. skk-record-file $B$N(B \"$B3NDj(B:\" $B9`L\$N%+%&%s%?!<!#(B" )
  1316.  
  1317. (defvar skk-touroku-count 0
  1318.   "$B<-=qEPO?$7$?%+%&%s%H$rJ];}$9$kJQ?t!#(B
  1319. skk-record-file $B$N(B \"$BEPO?(B:\" $B9`L\$N%+%&%s%?!<!#(B" )
  1320.  
  1321. (defvar skk-update-jisyo-count 0
  1322.   "$B<-=q$r99?7$7$?2s?t!#(B
  1323. $B$3$N%+%&%s%?!<$N?t;z$,(B skk-jisyo-save-count $B0J>e$H$J$C$?$H$-$K%f!<%6!<<-=q$N%*!<(B
  1324. $B%H%;!<%V$,9T$J$o$l$k!#(B" )
  1325.  
  1326. (defvar skk-use-relation nil
  1327.   "*skk-relation $B$r;HMQ$9$k!#$3$l$OD>A0$NJQ49$r21$($F$*$/$3$H$G!"(B
  1328. $BJQ498zN($rNI$/$7$h$&$H$$$&;n$_!#(B" )
  1329.  
  1330. (defvar skk-relation-length (* skk-kanji-len 10)
  1331.   "skk-relation $B;HMQ;~$K!"2?J8;zA0$NJQ49$^$G21$($F$*$/$+$r;XDj$9$kJQ?t!#(B" )
  1332.  
  1333. (defvar skk-relation-record-num 100
  1334.   "skk-relation $B;HMQ;~$K!"2?%(%s%H%j$^$G%U%!%$%k$K5-21$9$k$+$r<($9!#(B" )
  1335.  
  1336. ;; ---- buffer local variables
  1337. ;; <$B%U%i%0N`(B>
  1338. ;;;###skk-autoload
  1339. (skk-deflocalvar skk-mode nil
  1340.   "Non-nil $B$G$"$l$P!"%+%l%s%H%P%C%U%!$G8=:_(B skk-mode $B$r5/F0$7$F$$$k$3$H$r<($9!#(B" )
  1341.  
  1342. ;;;###skk-autoload
  1343. (skk-deflocalvar skk-ascii-mode nil
  1344.   "Non-nil $B$G$"$l$P!"F~NO%b!<%I$,(B ASCII $B%b!<%I$G$"$k$3$H$r<($9!#(B" )
  1345.  
  1346. ;;;###skk-autoload
  1347. (skk-deflocalvar skk-j-mode nil
  1348.   "Non-nil $B$G$"$l$P!"F~NO%b!<%I$,$+$J!&%+%J%b!<%I$G$"$k$3$H$r<($9!#(B" )
  1349.  
  1350. ;;;###skk-autoload
  1351. (skk-deflocalvar skk-katakana nil
  1352.   "Non-nil $B$G$"$l$P!"F~NO%b!<%I$,%+%J%b!<%I$G$"$k$3$H$r<($9!#(B
  1353. \"(and (not skk-katakana) skk-j-mode))\" $B$,(B t $B$G$"$l$P!"$+$J%b!<%I$G$"$k$3$H$r(B
  1354. $B<($9!#(B" )
  1355.  
  1356. ;;;###skk-autoload
  1357. (skk-deflocalvar skk-zenkaku-mode nil
  1358.   "Non-nil $B$G$"$l$P!"F~NO%b!<%I$,A41Q%b!<%I$G$"$k$3$H$r<($9!#(B" )
  1359.  
  1360. ;;;###skk-autoload
  1361. (skk-deflocalvar skk-abbrev-mode nil
  1362.   "Non-nil $B$G$"$l$P!"F~NO%b!<%I$,(B SKK abbrev $B%b!<%I$G$"$k$3$H$r<($9!#(B" )
  1363.  
  1364. ;;;###skk-autoload
  1365. (skk-deflocalvar skk-okurigana nil
  1366.   "Non-nil $B$G$"$l$P!"Aw$j2>L>ItJ,$,F~NOCf$G$"$k$3$H$r<($9!#(B" )
  1367.  
  1368. ;;;###skk-autoload
  1369. (skk-deflocalvar skk-henkan-on nil
  1370.   "Non-nil $B$G$"$l$P!""&%b!<%I(B ($BJQ49BP>]$NJ8;zNs7hDj$N$?$a$N%b!<%I(B) $B$G$"$k$3$H$r<($9!#(B" )
  1371.  
  1372. ;;;###skk-autoload
  1373. (skk-deflocalvar skk-henkan-active nil
  1374.   "Non-nil $B$G$"$l$P!""'%b!<%I(B ($BJQ49Cf(B) $B$G$"$k$3$H$r<($9!#(B" )
  1375.  
  1376. ;;;###skk-autoload
  1377. (skk-deflocalvar skk-kakutei-flag nil
  1378.   "Non-nil $B$J$i3NDj$7$FNI$$8uJd$r8+$D$1$?>uBV$G$"$k$3$H$r;X$9!#(B
  1379. skk-henkan, skk-search-kakutei-jisyo-file, skk-henkan-show-candidates,
  1380. skk-henkan-in-minibuff $B$H(B skk-kakutei-save-and-init-variables $B$GJQ99!";2>H$5$l(B
  1381. $B$k!#(B" )
  1382.  
  1383. (skk-deflocalvar skk-exit-show-candidates nil
  1384.   "$B%_%K%P%C%U%!$G8uJd$r<!!9$KI=<($7$F!"8uJd$,?T$-$?$H$-$K(B non-nil $B$H$J$k!#(B
  1385. $B$=$NCM$O%j%9%H$G!"(Bcar $B$K(B skk-henkan-show-candidate $B4X?t$G(B while $B%k!<%W$r2s$C(B
  1386. $B$?2s?t$r<($90l;~JQ?t(B loop $B$NCM$r!"(Bcdr $BIt$K:G8e$K%_%K%P%C%U%!$KI=<($7$?(B 1 $B$DA0(B
  1387. $B$N8uJd72$N:G8e$NMWAG$r;X$9%$%s%G%/%9$,BeF~$5$l$k!#(B
  1388. skk-henkan-show-candidates, skk-henkan-in-minibuff $B$H(B
  1389. skk-kakutei-save-and-init-variables $B$GJQ99!";2>H$5$l$k!#(B" )
  1390.  
  1391. (skk-deflocalvar skk-last-henkan-result nil
  1392.   "" )
  1393.  
  1394. (skk-deflocalvar skk-last-henkan-point nil
  1395.   "" )
  1396.  
  1397. ;; <$B%-!<%^%C%W4XO"(B>
  1398.  
  1399. ;; <$B<-=q4XO"$NJQ?t(B>
  1400. (skk-deflocalvar skk-okuri-ari-min nil
  1401.   "SKK $B<-=q$NAw$jM-$j%(%s%H%j$N3+;OE@$r<($9%P%C%U%!%]%$%s%H!#(B")
  1402.  
  1403. (skk-deflocalvar skk-okuri-ari-max nil
  1404.   "SKK $B<-=q$NAw$jM-$j%(%s%H%j$N=*N;E@$r<($9%P%C%U%!%]%$%s%H!#(B
  1405. skk-jisyo $B$N%P%C%U%!$G$O<-=q$N99?7$NI,MW$,$"$k$?$a$K%^!<%+!<$,BeF~$5$l$k!#(B" )
  1406.  
  1407. (skk-deflocalvar skk-okuri-nasi-min nil
  1408.   "SKK $B<-=q$NAw$j$J$7%(%s%H%j$N3+;OE@$r<($9%P%C%U%!%]%$%s%H!#(B
  1409. skk-jisyo $B$N%P%C%U%!$G$O<-=q$N99?7$NI,MW$,$"$k$?$a$K%^!<%+!<$,BeF~$5$l$k!#(B" )
  1410.  
  1411. ;; <$B$=$NB>(B>
  1412. (skk-deflocalvar skk-mode-line nil
  1413.   "SKK $B$N%b!<%I$r<($9%b!<%I%i%$%s$NJ8;zNs!#(B
  1414. skk-mode-string, skk-hirakana-mode-string, skk-katakana-mode-string
  1415. and skk-zenkaku-mode-string $B$N$$$:$l$+$,BeF~$5$l$k!#(B" )
  1416.  
  1417. ;; "" $B$KBP1~$7$?%(%s%H%j$,(B skk-roma-kana-[aiue] $B$K$"$k$?$a!"(B"" $B$r(B nil $B$GBeMQ(B
  1418. ;; $B$G$-$J$$!#(B
  1419. ;;;###skk-autoload
  1420. (skk-deflocalvar skk-prefix ""
  1421.   "$BF~NO$9$k$+$J$r7hDj$9$k$?$a$N%W%l%U%#%C%/%9!#(B
  1422. $B8e$GF~NO$5$l$kJl2;$KBP1~$7$?(B skk-roma-kana-[aiue] $BO"A[%j%9%H$G!"$=$N(B
  1423. skk-prefix $B$r%-!<$K$7$FF~NO$9$Y$-$+$JJ8;z$,7hDj$5$l$k!#(B
  1424. $BNc$($P!"(B\"$B$+(B\" $B$N$h$&$K(B \"k\" $B$+$i;O$^$k;R2;$rF~NO$7$F$$$k$H$-$O!"(Bskk-prefix
  1425. $B$O!"(B\"k\" $B$G!"$=$N<!$KF~NO$5$l$?Jl2;(B \"a\" $B$KBP1~$9$k(B skk-roma-kana-a $B$NCf$N(B
  1426. \"k\" $B$r%-!<$K;}$DCM!"(B\"$B$+(B\" $B$b$7$/$O(B \"$B%+(B\" $B$,F~NO$9$Y$-$+$JJ8;z$H$J$k!#(B" )
  1427.  
  1428. ;;;###skk-autoload
  1429. (skk-deflocalvar skk-henkan-start-point nil
  1430.   "$BJQ493+;O%]%$%s%H$r<($9%^!<%+!<!#(B" )
  1431.  
  1432. (skk-deflocalvar skk-henkan-end-point nil
  1433.   "$BJQ49=*N;%]%$%s%H$r<($9%^!<%+!<!#(B" )
  1434.  
  1435. ;;;###skk-autoload
  1436. (skk-deflocalvar skk-kana-start-point nil
  1437.   "$B$+$JJ8;z$N3+;O%]%$%s%H$r<($9%^!<%+!<!#(B" )
  1438.  
  1439. (skk-deflocalvar skk-okurigana-start-point nil
  1440.   "$BAw$j2>L>$N3+;O%]%$%s%H$r<($9%^!<%+!<!#(B" )
  1441.  
  1442. ;;;###skk-autoload
  1443. (skk-deflocalvar skk-henkan-key nil
  1444.   "$BJQ49$9$Y$-8+=P$78l!#(B
  1445. $BNc$($P!"(B\"$B"&$+$J(B\" $B$rJQ49$9$l$P!"(Bskk-henkan-key $B$K$O(B \"$B$+$J(B\" $B$,BeF~$5$l$k!#(B
  1446. \"$B"&$o$i(B*$B$&(B\" $B$N$h$&$JAw$j$"$j$NJQ49$N>l9g$K$O!"(B\"$B$o$i(Bu\" $B$N$h$&$K!"4A;zItJ,$N(B
  1447. $BFI$_$,$J(B + $BAw$j2>L>$N:G=i$NJ8;z$N%m!<%^;z$N%W%l%U%#%C%/%9$,BeF~$5$l$k!#(B" )
  1448.  
  1449. ;;;###skk-autoload
  1450. (skk-deflocalvar skk-okuri-char nil
  1451.   "$BJQ49$9$Y$-8l$NAw$j2>L>$NItJ,$N%W%l%U%#%C%/%9!#(B
  1452. $BNc$($P!"(B\"$B$*$/(B*$B$j(B\" $B$rJQ49$9$k$H$-$O!"(Bskk-okuri-char $B$O(B \"r\"$B!#(B
  1453. skk-okuri-char $B$,(B non-nil $B$G$"$l$P!"Aw$j$"$j$NJQ49$G$"$k$3$H$r<($9!#(B" )
  1454.  
  1455. ;;;###skk-autoload
  1456. (skk-deflocalvar skk-henkan-okurigana nil
  1457.   "$B8=:_$NJQ49$NAw$j2>L>ItJ,!#(B
  1458. $BNc$($P!"(B\"$B"&$&$^$l(B*$B$k(B\" $B$rJQ49$9$l$P!"(Bskk-henkan-okurigana $B$K$O(B \"$B$k(B\" $B$,BeF~(B
  1459. $B$5$l$k!#(B" )
  1460.  
  1461. (skk-deflocalvar skk-last-kakutei-henkan-key nil
  1462.   "$B3NDj<-=q$K$h$j:G8e$K3NDj$7$?$H$-$N8+=P$78l!#(B
  1463. $B3NDj<-=q$K$h$k3NDj$ND>8e$K(B x $B%-!<$r2!$9$H3NDj$,%"%s%I%%$5$l$F!"3NDjA0$N>uBV$G(B
  1464. $B$3$N8+=P$78l$,%+%l%s%H%P%C%U%!$KA^F~$5$l$k!#(B" )
  1465.  
  1466. ;;;###skk-autoload
  1467. (skk-deflocalvar skk-henkan-list nil
  1468.   "$BJQ497k2L$N8uJd$N%j%9%H!#(B
  1469. $BNc$($P!"(B\"$B"&$J(B*$B$/(B\" $B$H$$$&JQ49$9$l$P!"(Bskk-henkan-list $B$O(B
  1470. (\"$BLD(B\" \"$B5c(B\" \"$BL5(B\" \"$BK4(B\") $B$N$h$&$K$J$k!#(B" )
  1471.  
  1472. ;;;###skk-autoload
  1473. (skk-deflocalvar skk-henkan-count -1
  1474.   "skk-henkan-list $B$N%j%9%H$N%$%s%G%/%9$G8=:_$N8uJd$r:9$9$b$N!#(B" )
  1475.  
  1476. (skk-deflocalvar skk-self-insert-non-undo-count 1
  1477.   "skk-self-insert $B$J$I$GO"B3F~NO$7$?J8;z?t$rI=$o$9%+%&%s%?!<!#(B
  1478. Emacs $B$N%*%j%8%J%k$NF0:n$G$O!"(Bself-insert-command $B$K%P%$%s%I$5$l$?%-!<F~NO$O!"(B
  1479. $BO"B3(B 20 $B2s$^$G$,(B 1 $B$D$N%"%s%I%%$NBP>]$H$J$k!#$3$NF0:n$r%(%_%e%l!<%H$9$k$?$a$N(B
  1480. $B%+%&%s%?!<!#(B
  1481. skk-self-insert $B0J30$G$O!"(Bskk-abbrev-comma, skk-abbrev-period, skk-insert-a,
  1482. skk-insert-comma, skk-insert-e, skk-insert-i, skk-insert-period, skk-insert-u,
  1483. skk-kana-input, skk-set-henkan-point, skk-zenkaku-insert $B$N$$$:$l$+$N%3%^%s%I(B
  1484. $B$GF~NO$5$l$?>l9g$bO"B3$7$?F~NO$H$7$F07$o$l$k!#(B
  1485. $B$3$N%+%&%s%?!<$,!"(B20 $B0J2<$G$"$k$H$-$O!"F~NO$N$?$S$K(B cancel-undo-boundary $B$,%3!<(B
  1486. $B%k$5$l$k!#(B" )
  1487.  
  1488. ;;;###skk-autoload
  1489. (skk-deflocalvar skk-current-search-prog-list nil
  1490.   "skk-search-prog-list $B$N8=:_$NCM$rJ]B8$9$k%j%9%H!#(B
  1491. $B:G=i$NJQ49;~$O(B skk-search-prog-list $B$NA4$F$NCM$rJ];}$7!"JQ49$r7+$jJV$9$?$S$K(B 1
  1492. $B$D$E$DC;$/$J$C$F$f$/!#(B" )
  1493.  
  1494. ;; for skk-undo-kakutei
  1495. (skk-deflocalvar skk-last-henkan-key nil
  1496.   "skk-henkan-key $B$N:G8e$NCM!#(Bskk-undo-kakutei $B$G;2>H$5$l$k!#(B" )
  1497.  
  1498. (skk-deflocalvar skk-last-henkan-okurigana nil
  1499.   "skk-henkan-okurigana $B$N:G8e$NCM!#(Bskk-undo-kakutei $B$G;2>H$5$l$k!#(B" )
  1500.  
  1501. (skk-deflocalvar skk-last-henkan-list nil
  1502.   "skk-henkan-list $B$N:G8e$NCM!#(Bskk-undo-kakutei $B$G;2>H$5$l$k!#(B" )
  1503.  
  1504. (skk-deflocalvar skk-last-okuri-char nil
  1505.   "skk-okuri-char $B$N:G8e$NCM!#(Bskk-undo-kakutei $B$G;2>H$5$l$k!#(B" )
  1506.  
  1507. (skk-deflocalvar skk-henkan-overlay nil
  1508.   "$B8uJd$rI=<($9$k$H$-$K;HMQ$9$k(B Overlay$B!#(B" )
  1509.  
  1510. ;;;###skk-autoload
  1511. (defvar skk-menu-modified-user-option nil
  1512.   "SKK $B%a%K%e!<%3%^%s%I$GJQ99$5$l$?%f!<%6!<JQ?tJ];}$9$k%j%9%H!#(B"  )
  1513.  
  1514. (or (assq 'skk-mode minor-mode-alist)
  1515.     (setq minor-mode-alist
  1516.           (cons '(skk-mode skk-input-mode-string) minor-mode-alist) ))
  1517.  
  1518. ;;      +----------------------+-------- skk-mode -----+----------------------+
  1519. ;;      |                      |                       |                      |
  1520. ;;      |                      |                       |                      |
  1521. ;;  skk-j-mode           skk-ascii-mode          skk-zenkaku-mode      skk-abbrev-mode
  1522. ;;                           ASCII                ZENKAKU EIMOJI          ABBREVIATION
  1523. ;;                  (C-j wakes up skk-j-mode)
  1524. ;;
  1525. ;;  skk-j-mode-map       skk-ascii-mode-map      skk-zenkaku-mode-map  skk-abbrev-mode-map
  1526. ;;   skk-katakana: nil 
  1527. ;;    HIRAKANA
  1528. ;;
  1529. ;;  skk-j-mode-map
  1530. ;;   skk-katakana: t
  1531. ;;    KATAKANA
  1532.  
  1533. ;; sub minor mode
  1534. ;;(cond ((and skk-xemacs (local-variable-p 'minor-mode-map-alist nil t)))
  1535. ;;      ((local-variable-p 'minor-mode-map-alist)
  1536. ;;       (setq-default minor-mode-map-alist minor-mode-map-alist) ))
  1537.  
  1538. (or (assq 'skk-ascii-mode minor-mode-map-alist)
  1539.     (setq minor-mode-map-alist
  1540.           (cons (cons 'skk-ascii-mode skk-ascii-mode-map) minor-mode-map-alist) ))
  1541.  
  1542. (or (assq 'skk-abbrev-mode minor-mode-map-alist)
  1543.     (setq minor-mode-map-alist
  1544.           (cons (cons 'skk-abbrev-mode skk-abbrev-mode-map) minor-mode-map-alist) ))
  1545.  
  1546. (or (assq 'skk-j-mode minor-mode-map-alist)
  1547.     (setq minor-mode-map-alist
  1548.           (cons (cons 'skk-j-mode skk-j-mode-map) minor-mode-map-alist) ))
  1549.  
  1550. (or (assq 'skk-zenkaku-mode minor-mode-map-alist)
  1551.     (setq minor-mode-map-alist
  1552.           (cons (cons 'skk-zenkaku-mode skk-zenkaku-mode-map) minor-mode-map-alist) ))
  1553.  
  1554. ;;;; aliases
  1555. (defalias 'skk-backward-char 'backward-char)
  1556. (defalias 'skk-eventp 'eventp)
  1557. (defalias 'skk-forward-char 'forward-char)
  1558. (defalias 'skk-insert-and-inherit 'insert-and-inherit)
  1559. (defalias 'skk-skip-chars-backward 'skip-chars-backward)
  1560.  
  1561. ;;;; macros
  1562.  
  1563. ;; Why I use non-intern temporary variable in the macro --- see comment in
  1564. ;; save-match-data of subr.el of GNU Emacs. And should we use the same manner
  1565. ;; in the save-current-buffer, with-temp-buffer and with-temp-file macro
  1566. ;; definition?
  1567. ;;;###skk-autoload
  1568. (defmacro skk-save-point (&rest body)
  1569.   (` (let ((skk-save-point (point-marker)))
  1570.        (unwind-protect
  1571.        (progn (,@ body))
  1572.      (goto-char skk-save-point)
  1573.          (skk-set-marker skk-save-point nil) ))))
  1574.  
  1575. ;;;###skk-autoload
  1576. (defmacro skk-message (japanese english &rest arg)
  1577.   ;; skk-japanese-message-and-error $B$,(B non-nil $B$@$C$?$i(B JAPANESE $B$r(B nil $B$G$"$l(B
  1578.   ;; $B$P(B ENGLISH $B$r%(%3!<%(%j%"$KI=<($9$k!#(B
  1579.   ;; ARG $B$O(B message $B4X?t$NBh#20z?t0J9_$N0z?t$H$7$FEO$5$l$k!#(B
  1580.   (list 'let (list (list 'mc-flag t) (list 'enable-multibyte-characters t))
  1581.         (append (list 'message (list 'if 'skk-japanese-message-and-error
  1582.                                      japanese english ))
  1583.                 arg )))
  1584.  
  1585. ;;;###skk-autoload
  1586. (defmacro skk-error (japanese english &rest arg)
  1587.   ;; skk-japanese-message-and-error $B$,(B non-nil $B$@$C$?$i(B JAPANESE $B$r(B nil $B$G$"$l(B
  1588.   ;; $B$P(B ENGLISH $B$r%(%3!<%(%j%"$KI=<($7!"%(%i!<$rH/@8$5$;$k!#(B
  1589.   ;; ARG $B$O(B error $B4X?t$NBh#20z?t0J9_$N0z?t$H$7$FEO$5$l$k!#(B
  1590.   (list 'let (list (list 'mc-flag t) (list 'enable-multibyte-characters t))
  1591.         (append (list 'error (list 'if 'skk-japanese-message-and-error
  1592.                                    japanese english ))
  1593.                 arg )))
  1594.  
  1595. ;;;###skk-autoload
  1596. (defmacro skk-yes-or-no-p (japanese english)
  1597.   ;; skk-japanese-message-and-error $B$,(B non-nil $B$G$"$l$P!"(Bjapanese $B$r(B nil $B$G$"(B
  1598.   ;; $B$l$P(B english $B$r%W%m%s%W%H$H$7$F(B yes-or-no-p $B$r<B9T$9$k!#(B
  1599.   ;; yes-or-no-p $B$N0z?t$N%W%m%s%W%H$,J#;($KF~$l9~$s$G$$$k>l9g$O$3$N%^%/%m$r;H(B
  1600.   ;; $B$&$h$j%*%j%8%J%k$N(B yes-or-no-p $B$r;HMQ$7$?J}$,%3!<%I$,J#;($K$J$i$J$$>l9g$,(B
  1601.   ;; $B$"$k!#(B
  1602.   (list 'let (list (list 'mc-flag t) (list 'enable-multibyte-characters t))
  1603.         (list 'yes-or-no-p (list 'if 'skk-japanese-message-and-error
  1604.                                  japanese english ))))
  1605.  
  1606. ;;;###skk-autoload
  1607. (defmacro skk-y-or-n-p (japanese english)
  1608.   ;; skk-japanese-message-and-error $B$,(B non-nil $B$G$"$l$P!"(Bjapanese $B$r(B nil $B$G$"(B
  1609.   ;; $B$l$P(B english $B$r%W%m%s%W%H$H$7$F(B y-or-n-p $B$r<B9T$9$k!#(B
  1610.   (list 'let (list (list 'mc-flag t) (list 'enable-multibyte-characters t))
  1611.         (list 'y-or-n-p (list 'if 'skk-japanese-message-and-error
  1612.                               japanese english ))))
  1613.  
  1614. ;;;###skk-autoload
  1615. (defmacro skk-set-marker (marker position &optional buffer)
  1616.   ;; $B%P%C%U%!%m!<%+%kCM$G$"$k(B skk-henkan-start-point, skk-henkan-end-point,
  1617.   ;; skk-kana-start-point, $B$"$k$$$O(B skk-okurigana-start-point $B$,(B nil $B$@$C$?$i!"(B
  1618.   ;; $B?75,%^!<%+!<$r:n$C$FBeF~$9$k!#(B
  1619.   ;;
  1620.   ;; skk.el $B$N%P%C%U%!%m!<%+%kCM$N07$$$K$OCm0U$9$Y$-E@$,$"$k!#(B
  1621.   ;; $BNc$($P!"$"$k%P%C%U%!(B Buffer A $B$G2<5-$N$h$&$J%U%)!<%`$rI>2A$7$?$H$9$k!#(B
  1622.   ;; ---------- Buffer A ---------------+--------------- Buffer B ----------
  1623.   ;; (setq test (make-marker))          |
  1624.   ;;  -> #<marker in no buffer>         |
  1625.   ;;                                    |
  1626.   ;; (make-variable-buffer-local 'test) |
  1627.   ;;                                    |
  1628.   ;; test                               | test
  1629.   ;;  -> #<marker in no buffer>         |  -> #<marker in no buffer>
  1630.   ;;                                    |
  1631.   ;; (set-marker test (point))          |
  1632.   ;;                                    |
  1633.   ;; test                               | test
  1634.   ;;  -> #<marker at 122 in A>          |  -> #<marker at 122 in A>
  1635.   ;;
  1636.   ;; $B%P%C%U%!%m!<%+%kCM$H$7$F$N@k8@$r$9$kA0$K(B non-nil $BCM$rBeF~$7!"$=$N(B non-nil
  1637.   ;; $BCM$rD>@\=q$-JQ$($k$h$&$J%U%)!<%`$rI>2A$9$k$H(B Buffer B $B$+$i8+$($k%G%#%U%)%k(B
  1638.   ;; $B%HCM$^$G=q$-JQ$C$F$7$^$&!#>e5-$NNc$O%^!<%+!<$@$,!"2<5-$N$h$&$K%j%9%H$KBP$7(B
  1639.   ;; $B$FGK2uE*4X?t$GA`:n$7$?$H$-$bF1MM$N7k2L$H$J$k!#(B
  1640.   ;; ---------- Buffer A ---------------+--------------- Buffer B ----------
  1641.   ;; (setq test '(A B C))               |
  1642.   ;;  -> (A B C)                        |
  1643.   ;;                                    |
  1644.   ;; (make-variable-buffer-local 'test) |
  1645.   ;;                                    |
  1646.   ;; test                               | test
  1647.   ;;  -> (A B C)                        |  -> (A B C)
  1648.   ;;                                    |
  1649.   ;; (setcar test 'X)                   |
  1650.   ;;                                    |
  1651.   ;; test                               | test
  1652.   ;;  -> (X B C)                        |  -> (X B C)
  1653.   ;;
  1654.   ;; $B$3$N8=>]$G0lHV:$$k$N$O!"4A;zEPO?$J$I$G%_%K%P%C%U%!$KF~$C$?$H$-(B
  1655.   ;; (skk-henkan-show-candidate $B$N$h$&$KC1$K!V%(%3!<%(%j%"!W$r;HMQ$9$k4X?t$G$O(B
  1656.   ;; $B4X78$J$$(B) $B$K!"$b$H$N%P%C%U%!$H%_%K%P%C%U%!$H$G$O$=$l$>$lJL$NJQ49$r9T$J$&(B
  1657.   ;; $B$N$,IaDL$G$"$k$N$G!">e5-$N$h$&$KB>$N%P%C%U%!$N%P%C%U%!%m!<%+%kCM$^$G=q$-(B
  1658.   ;; $BJQ$($F$7$^$&$H!"JQ49$r5Y;_$7$F$$$kB>$N%P%C%U%!$G@5>o$JJQ49$,$G$-$J$/$J$k(B
  1659.   ;; $B>l9g$,$"$k$3$H$G$"$k!#(B
  1660.   ;;
  1661.   ;; $B$7$+$b(B SKK $B$G$O%j%+!<%7%V%_%K%P%C%U%!$,;HMQ$G$-$k$N$G!"(B *Minibuf-0* $B$H(B
  1662.   ;;  *Minibuf-1 $B$N4V(B ($B$"$k$$$O$b$C$H?<$$%j%+!<%7%V%_%K%P%C%U%!F1;N$N4V(B) $B$G%P%C(B
  1663.   ;; $B%U%!%m!<%+%kCM$NGK2uE*=q$-JQ$($,9T$J$o$l$F$7$^$$!">e0L$N%_%K%P%C%U%!$KLa$C(B
  1664.   ;; $B$?$H$-$K@5>o$JJQ49$,$G$-$J$/$J$k>l9g$,$"$k!#(B
  1665.   ;;
  1666.   ;; $B$H$3$m$,2<5-$N$h$&$K=i4|CM$r(B nil $B$K$7$F!"%P%C%U%!%m!<%+%kCM$H$7$F$N@k8@8e!"(B
  1667.   ;; non-nil $BCM$rBeF~$9$l$P!"0J8e$=$N%P%C%U%!%m!<%+%kCM$KGK2uE*A`:n$r$7$F$b$=$N(B
  1668.   ;; $B%P%C%U%!$K8GM-$NCM$7$+JQ2=$7$J$$!#(B
  1669.   ;; ---------- Buffer A ---------------+--------------- Buffer B ----------
  1670.   ;; (setq test nil)                    |
  1671.   ;;                                    |
  1672.   ;; (make-variable-buffer-local 'test) |
  1673.   ;;                                    |
  1674.   ;; test                               | test
  1675.   ;;  -> nil                            |  -> nil
  1676.   ;;                                    |
  1677.   ;; (setq test (make-marker))          |
  1678.   ;;  -> #<marker in no buffer>         |
  1679.   ;;                                    |
  1680.   ;; (set-marker test (point))          |
  1681.   ;;                                    |
  1682.   ;; test                               | test
  1683.   ;;  -> #<marker at 122 in A>          |  -> nil
  1684.   ;;
  1685.   ;; skk.el 9.3 $B$N;~E@$G$O!"(Bskk-henkan-start-point, skk-henkan-end-point,
  1686.   ;; skk-kana-start-point $B5Z$S(B skk-okurigana-start-point $B$N=i4|CM(B
  1687.   ;; (make-variable-buffer-local $B$,%3!<%k$5$l$kA0$NCM(B) $B$,(B make-marker $B$NJV$jCM(B
  1688.   ;; $B$G$"$k(B #<marker in no buffer> $B$G$"$C$?$N$G!"%j%+!<%7%V%_%K%P%C%U%!$KF~$C(B
  1689.   ;; $B$FJQ49$7$?$H$-$K(B "$B"'(B" $B$,>C$($J$$!"$J$I$N%H%i%V%k$,$"$C$?$,!"$3$l$i$N=i4|(B
  1690.   ;; $BCM$r(B nil $B$K$7$F;HMQ;~$K(B make-marker $B$NJV$jCM$rBeF~$9$k$h$&$K$7!"$3$NLdBj$r(B
  1691.   ;; $B2r7h$7$?!#(B
  1692.   (list 'progn
  1693.         (list 'if (list 'not marker)
  1694.               (list 'setq marker (list 'make-marker)) )
  1695.         (list 'set-marker marker position buffer) ))
  1696.  
  1697. ;;;; inline functions
  1698. (defsubst skk-mode-off ()
  1699.   (setq skk-mode nil
  1700.         skk-abbrev-mode nil
  1701.         skk-ascii-mode nil
  1702.         skk-j-mode nil
  1703.         skk-zenkaku-mode nil
  1704.         ;; j's sub mode.
  1705.         skk-katakana nil )
  1706.   ;; initialize
  1707.   (setq skk-input-mode-string skk-hirakana-mode-string)
  1708.   (setq skk-last-henkan-result nil)
  1709.   (skk-set-marker skk-last-henkan-point nil)
  1710.   (skk-set-cursor-color skk-default-cursor-color)
  1711.   (force-mode-line-update) )
  1712.  
  1713. ;;;###skk-autoload
  1714. (defsubst skk-j-mode-on (&optional katakana)
  1715.   (setq skk-mode t
  1716.         skk-abbrev-mode nil
  1717.         skk-ascii-mode nil
  1718.         skk-j-mode t
  1719.         skk-zenkaku-mode nil
  1720.         ;; j's sub mode.
  1721.         skk-katakana katakana )
  1722.   ;; mode line
  1723.   (if katakana
  1724.       (progn
  1725.         (setq skk-input-mode-string skk-katakana-mode-string)
  1726.         (skk-set-cursor-color skk-katakana-cursor-color) ) 
  1727.     (setq skk-input-mode-string skk-hirakana-mode-string)
  1728.     (skk-set-cursor-color skk-hirakana-cursor-color) )
  1729.   (force-mode-line-update) )
  1730.         
  1731. ;;;###skk-autoload
  1732. (defsubst skk-ascii-mode-on ()
  1733.   (setq skk-mode t
  1734.         skk-abbrev-mode nil
  1735.         skk-ascii-mode t
  1736.         skk-j-mode nil
  1737.         skk-zenkaku-mode nil
  1738.         ;; j's sub mode.
  1739.         skk-katakana nil
  1740.         skk-input-mode-string skk-ascii-mode-string )
  1741.   (skk-set-cursor-color skk-ascii-cursor-color)
  1742.   (force-mode-line-update) )
  1743.  
  1744. ;;;###skk-autoload
  1745. (defsubst skk-zenkaku-mode-on ()
  1746.   (setq skk-mode t
  1747.         skk-abbrev-mode nil
  1748.         skk-ascii-mode nil
  1749.         skk-j-mode nil
  1750.         skk-zenkaku-mode t
  1751.         ;; j's sub mode.
  1752.         skk-katakana nil
  1753.         skk-input-mode-string skk-zenkaku-mode-string )
  1754.   (skk-set-cursor-color skk-zenkaku-cursor-color)
  1755.   (force-mode-line-update) )
  1756.  
  1757. ;;;###skk-autoload
  1758. (defsubst skk-abbrev-mode-on ()
  1759.   (setq skk-mode t
  1760.         skk-abbrev-mode t
  1761.         skk-ascii-mode nil
  1762.         skk-j-mode nil
  1763.         skk-zenkaku-mode nil
  1764.         ;; j's sub mode.
  1765.         skk-katakana nil
  1766.         skk-input-mode-string skk-abbrev-mode-string )
  1767.   (skk-set-cursor-color skk-abbrev-cursor-color)
  1768.   (force-mode-line-update) )
  1769.  
  1770. ;;;###skk-autoload
  1771. (defsubst skk-in-minibuffer-p ()
  1772.   ;; $B%+%l%s%H%P%C%U%!$,%_%K%P%C%U%!$+$I$&$+$r%A%'%C%/$9$k!#(B
  1773.   (window-minibuffer-p (selected-window)) )
  1774.  
  1775. ;;;###skk-autoload
  1776. (defsubst skk-insert-prefix (&optional char)
  1777.   ;; skk-echo $B$,(B non-nil $B$G$"$l$P%+%l%s%H%P%C%U%!$K(B skk-prefix $B$rA^F~$9$k!#(B
  1778.   (if skk-echo
  1779.       ;; skk-prefix $B$NA^F~$r%"%s%I%%$NBP>]$H$7$J$$!#A^F~$7$?%W%l%U%#%C%/%9$O!"(B
  1780.       ;; $B$+$JJ8;z$rA^F~$9$kA0$KA4$F>C5n$9$k$N$G!"$=$N4V!"(Bbuffer-undo-list $B$r(B
  1781.       ;; t $B$K$7$F%"%s%I%%>pJs$rC_$($J$/$H$bLdBj$,$J$$!#(B
  1782.       (let ((buffer-undo-list t))
  1783.         (insert (or char skk-prefix)) )))
  1784.  
  1785. ;;;###skk-autoload
  1786. (defsubst skk-erase-prefix ()
  1787.   ;; skk-echo $B$,(B non-nil $B$G$"$l$P%+%l%s%H%P%C%U%!$KA^F~$5$l$?(B skk-prefix $B$r>C(B
  1788.   ;; $B$9!#(B
  1789.   (if skk-echo
  1790.       ;; skk-prefix $B$N>C5n$r%"%s%I%%$NBP>]$H$7$J$$!#(B
  1791.       (let ((buffer-undo-list t))
  1792.         (delete-region skk-kana-start-point (point) ))))
  1793.  
  1794. (defsubst skk-string<= (str1 str2)
  1795.   ;; str1 $B$,(B str2 $B$HHf3S$7$F!"(Bstring< $B$+(B string= $B$G$"$l$P!"(Bt $B$rJV$9!#(B
  1796.   (or (string< str1 str2) (string= str1 str2)) )
  1797.  
  1798. (defsubst skk-jis-char-p (char)
  1799.   ;; char $B$,(B JIS $BJ8;z$@$C$?$i(B t $B$rJV$9!#(B
  1800.   (> char 127) )
  1801.  
  1802. (defsubst skk-alpha-char-p (char)
  1803.   ;; char $B$,(B ascii $BJ8;z$@$C$?$i(B t $B$rJV$9!#(B
  1804.   (<= char 127) )
  1805.  
  1806. (defsubst skk-lower-case-p (char)
  1807.   ;; char $B$,>.J8;z$N%"%k%U%!%Y%C%H$G$"$l$P!"(Bt $B$rJV$9!#(B
  1808.   (and (<= ?a char) (>= ?z char) ))
  1809.  
  1810. (defsubst skk-do-auto-fill ()
  1811.   ;; auto-fill-function $B$KCM$,BeF~$5$l$F$*$l$P!"(Bdo-auto-fill $B$r%3!<%k$9$k!#(B
  1812.   (and auto-fill-function (funcall auto-fill-function)) )
  1813.  
  1814. ;;;; from dabbrev.el.  Welcome!
  1815. ;; $BH=Dj4V0c$$$rHH$9>l9g$"$j!#MW2~NI!#(B
  1816. (defsubst skk-minibuffer-origin ()
  1817.   (nth 1 (buffer-list)) )
  1818.  
  1819. ;;;###skk-autoload
  1820. (defsubst skk-numeric-p ()
  1821.   (and skk-use-numeric-conversion (require 'skk-num)
  1822.        skk-num-list ))
  1823.  
  1824. (defsubst skk-substring-head-character (string)
  1825.   (char-to-string (string-to-char string)) )
  1826.  
  1827. (defsubst skk-get-simply-current-candidate (&optional noconv)
  1828.   (if (> skk-henkan-count -1)
  1829.       ;; (nth -1 '(A B C)) $B$O!"(BA $B$rJV$9$N$G!"Ii$G$J$$$+$I$&$+%A%'%C%/$9$k!#(B
  1830.       (let ((word (nth skk-henkan-count skk-henkan-list)))
  1831.         (and word
  1832.              (if (and (skk-numeric-p) (consp word))
  1833.                  (if noconv (car word) (cdr word))
  1834.                word )))))
  1835.  
  1836. (eval-after-load "font-lock"
  1837.   '(mapcar (function
  1838.             (lambda (pattern)
  1839.               (add-to-list
  1840.                'lisp-font-lock-keywords-2
  1841.                (cons pattern
  1842.                      '((1 font-lock-keyword-face)
  1843.                        (2 font-lock-variable-name-face) )))))
  1844.            '("^(\\(skk-deflocalvar\\)[ \t'\(]*\\(\\sw+\\)?"
  1845.              "^(\\(skk-defunsoft\\)[ \t'\(]*\\(\\sw+\\)?" )))
  1846.  
  1847. (defun skk-submit-bug-report ()
  1848.   "$B%a!<%k$G(B SKK $B$N%P%0%l%]!<%H$rAw$k!#(B
  1849. reporter-mailer $B$r@_Dj$9$k$3$H$K$h$j9%$_$N%a!<%k%$%s%?!<%U%'%$%9$r;HMQ$9$k$3$H(B
  1850. $B$,$G$-$k!#Nc$($P!"(BMew $B$r;HMQ$7$?$$>l9g$O2<5-$N$h$&$K@_Dj$9$k!#(B
  1851.  
  1852.     \(setq reporter-mailer '\(mew-send reporter-mail\)\)
  1853.  
  1854. reporter.el 3.2 $B$G$O!"JQ?t(B reporter-mailer $B$,$J$/$J$C$?!#$3$N%P!<%8%g%s$G$O!"(B
  1855.  
  1856.     \(setq mail-user-agent 'mew-user-agent\)
  1857.  
  1858. $B$H;XDj$9$k!#(B"
  1859.   (interactive)
  1860.   (require 'reporter)
  1861.   (if (and (boundp 'mail-user-agent)
  1862.            (eq mail-user-agent 'mew-user-agent) )
  1863.       (define-mail-user-agent 'mew-user-agent
  1864.         'mew-send 'mew-draft-send-letter 'mew-draft-kill ))
  1865.   (and (y-or-n-p "Do you really want to submit a report on SKK? ")
  1866.        (reporter-submit-bug-report
  1867.         skk-ml-address
  1868.         (concat "skk.el " (skk-version)
  1869.                 (if (or (and (boundp 'skk-server-host) skk-server-host)
  1870.                         (and (boundp 'skk-servers-list) skk-servers-list)
  1871.                         (getenv "SKKSERVER")
  1872.                         (getenv "SKKSERV") )
  1873.                     (progn
  1874.                       (require 'skk-server)
  1875.                       (concat ", skkserv; " (skk-server-version)
  1876.                               (if (getenv "SKKSERVER")
  1877.                                   (concat ",\nSKKSERVER; "
  1878.                                           (getenv "SKKSERVER") ))
  1879.                               (if (getenv "SKKSERV")
  1880.                                   (concat ", SKKSERV; "
  1881.                                           (getenv "SKKSERV") ))))))
  1882.         (let ((base (list 'window-system
  1883.                           'skk-auto-okuri-process
  1884.                           'skk-auto-start-henkan
  1885.                           'skk-egg-like-newline
  1886.                           'skk-henkan-okuri-strictly
  1887.                           'skk-henkan-strict-okuri-precedence
  1888.                           'skk-kakutei-early
  1889.                           'skk-process-okuri-early
  1890.                           'skk-search-prog-list
  1891.                           'skk-use-face
  1892.                           'skk-use-vip )))
  1893.           (if (boundp 'skk-henkan-face)
  1894.               (nconc base '(skk-henkan-face)) )
  1895.           (if (boundp 'skk-server-host)
  1896.               (nconc base '(skk-server-host)) )
  1897.           (if (boundp 'skk-server-prog)
  1898.               (nconc base '(skk-server-prog)) )
  1899.           (if (boundp 'skk-servers-list)
  1900.               (nconc base '(skk-servers-list)) )
  1901.           base ))))
  1902.  
  1903. ;;;; defadvices.
  1904. ;; defadvice $B$GDj5A$9$k$H!"8e$G%f!<%6!<$,?75,$N5!G=$rIU$1$F99$K(B defadvice $B$7$F(B
  1905. ;; $B$b$A$c$s$HF0$/!#(B
  1906.  
  1907. ;; cover to original functions.
  1908.  
  1909. (defadvice keyboard-quit (around skk-ad activate)
  1910.   "$B"'%b!<%I$G$"$l$P!"8uJd$NI=<($r$d$a$F"&%b!<%I$KLa$9(B ($B8+=P$78l$O;D$9(B)$B!#(B
  1911. $B"&%b!<%I$G$"$l$P!"8+=P$78l$r:o=|$9$k!#(B
  1912. $B>e5-$N$I$A$i$N%b!<%I$G$b$J$1$l$P(B keyboard-quit $B$HF1$8F0:n$r$9$k!#(B"
  1913.   (cond ((not skk-henkan-on)
  1914.          (with-current-buffer (skk-minibuffer-origin)
  1915.            (skk-set-cursor-properly) )
  1916.          ad-do-it )
  1917.         (skk-henkan-active
  1918.          (setq skk-henkan-count 0)
  1919.          (if (and skk-delete-okuri-when-quit skk-henkan-okurigana)
  1920.              (let ((count (/ (length skk-henkan-okurigana) skk-kanji-len)))
  1921.                (skk-previous-candidate)
  1922.                ;; $B$3$3$G$O(B delete-backward-char $B$KBhFs0z?t$rEO$5$J$$J}$,%Y%?!<!)(B
  1923.                (delete-backward-char count) )
  1924.            (skk-previous-candidate) ))
  1925.         (t (if (> (point) skk-henkan-start-point)
  1926.                (delete-region (point) skk-henkan-start-point) )
  1927.            (skk-kakutei) )))
  1928.  
  1929. (defadvice abort-recursive-edit (around skk-ad activate)
  1930.   "$B"'%b!<%I$G$"$l$P!"8uJd$NI=<($r$d$a$F"&%b!<%I$KLa$9(B ($B8+=P$78l$O;D$9(B)$B!#(B
  1931. $B"&%b!<%I$G$"$l$P!"8+=P$78l$r:o=|$9$k!#(B
  1932. $B>e5-$N$I$A$i$N%b!<%I$G$b$J$1$l$P(B abort-recursive-edit $B$HF1$8F0:n$r$9$k!#(B"
  1933.   (cond ((not skk-henkan-on)
  1934.          (with-current-buffer (skk-minibuffer-origin)
  1935.            (skk-set-cursor-properly) )
  1936.          ad-do-it )
  1937.         (skk-henkan-active
  1938.          (setq skk-henkan-count 0)
  1939.          (if (and skk-delete-okuri-when-quit skk-henkan-okurigana)
  1940.              (let ((count (/ (length skk-henkan-okurigana) skk-kanji-len)))
  1941.                (skk-previous-candidate)
  1942.                ;; $B$3$3$G$O(B delete-backward-char $B$KBhFs0z?t$rEO$5$J$$J}$,%Y%?!<!)(B
  1943.                (delete-backward-char count) )
  1944.            (skk-previous-candidate) ))
  1945.         (t (if (> (point) skk-henkan-start-point)
  1946.                (delete-region (point) skk-henkan-start-point) )
  1947.            (skk-kakutei) )))
  1948.  
  1949. (defadvice newline (around skk-ad activate)
  1950.   (if (not (or skk-j-mode skk-abbrev-mode))
  1951.       ad-do-it
  1952.     (let ((arg (ad-get-arg 0))
  1953.           ;; skk-kakutei $B$r<B9T$9$k$H(B skk-henkan-on $B$NCM$,L5>r7o$K(B nil $B$K$J$k(B
  1954.           ;; $B$N$G!"J]B8$7$F$*$/I,MW$,$"$k!#(B
  1955.           (no-newline (and skk-egg-like-newline skk-henkan-on))
  1956.       (auto-fill-function auto-fill-function) )
  1957.       (if (not (interactive-p))
  1958.       (setq auto-fill-function nil) )
  1959.       (if (skk-kakutei)
  1960.           ;; skk-do-auto-fill $B$K$h$C$F9T$,@^$jJV$5$l$?$i(B arg $B$r(B 1 $B$D8:$i$9!#(B
  1961.       ;; fill $B$5$l$F$b(B nil $B$,5"$C$F$/$k(B :-<
  1962.           (setq arg (1- arg)) )
  1963.       (if (not no-newline)
  1964.           (progn
  1965.             (ad-set-arg 0 arg)
  1966.             ad-do-it )))))
  1967.  
  1968. (defadvice newline-and-indent (around skk-ad activate)
  1969.   (if (and skk-egg-like-newline skk-henkan-on)
  1970.       (newline)
  1971.     ad-do-it))
  1972.  
  1973. (defadvice exit-minibuffer (around skk-ad activate)
  1974.   (if (not (or skk-j-mode skk-abbrev-mode))
  1975.       ad-do-it
  1976.     (let ((no-newline (and skk-egg-like-newline skk-henkan-on)))
  1977.       (if skk-mode (skk-kakutei))
  1978.       (or no-newline ad-do-it) )))
  1979.  
  1980. (defadvice delete-backward-char (around skk-ad activate)
  1981.   "$B8=:_$N%]%$%s%H$+$iLa$C$F(B COUNT $BJ8;z$r>C5n$9$k!#(B"
  1982.   (let ((count (or (prefix-numeric-value (ad-get-arg 0)) 1)))
  1983.     (cond ((and skk-henkan-on (>= skk-henkan-start-point (point)))
  1984.            (setq skk-henkan-count 0)
  1985.            (skk-kakutei) )
  1986.           (skk-henkan-active
  1987.            (if (and (not skk-delete-implies-kakutei)
  1988.                     (= skk-henkan-end-point (point)) )
  1989.                (skk-previous-candidate)
  1990.              ;;(if skk-use-face (skk-henkan-face-off))
  1991.              ;; overwrite-mode $B$GA43QJ8;zA43QJ8;z$K0O$^$l!"$+$DD>A0$NJ8;z$,A4(B
  1992.              ;; $B3QJ8;z$G$"$k%]%$%s%H$G(B delete-backward-char $B$r;H$&$H!"A43QJ8;z(B
  1993.              ;; $B$O>C$9$,H>3QJ8;zJ,$7$+(B backward $BJ}8~$K%]%$%s%H$,La$i$J$$(B
  1994.              ;; (Emacs 19.31 $B$K$F3NG'(B)$B!#JQ49Cf$N8uJd$KBP$7$F$O(B
  1995.              ;; delete-backward-char $B$GI,$:A43QJ8;z(B 1 $BJ8;zJ,(B backward $BJ}8~$KLa$C(B
  1996.              ;; $B$?J}$,NI$$!#(B
  1997.              (if overwrite-mode
  1998.                  (progn
  1999.                    (backward-char count)
  2000.                    (delete-char count) )
  2001.                ad-do-it )
  2002.              (if (>= skk-henkan-end-point (point)) (skk-kakutei)) ))
  2003.           ;; $BF~NOCf$N8+=P$78l$KBP$7$F$O(B delete-backward-char $B$GI,$:A43QJ8;z(B 1
  2004.           ;; $BJ8;zJ,(B backward $BJ}8~$KLa$C$?J}$,NI$$!#(B
  2005.           ((and skk-henkan-on overwrite-mode)
  2006.            (backward-char count)
  2007.            (delete-char count) )
  2008.           (t ad-do-it) )))
  2009.  
  2010. (defadvice save-buffers-kill-emacs (before skk-ad activate)
  2011.   "SKK $B<-=q$r%;!<%V$7$F!"(BEmacs $B$r=*N;$9$k!#(B
  2012. $B%;!<%V8e!"(Bskk-before-kill-emacs-hook $B$r<B9T$7$F$+$i(B Emacs $B$r%-%k$9$k!#(B"
  2013.   ;; defadvice $B$9$k:]!"Ho(B advice $B4X?t$H$O0c$&J}K!$G0z?tEO$7$r$7$?$$>l9g0J30$O!"(B
  2014.   ;; interactive + descripter $B$OMW$i$J$$$_$?$$!#(B
  2015.   ;;(interactive "P")
  2016.   (skk-save-jisyo)
  2017.   (run-hooks 'skk-before-kill-emacs-hook) )
  2018.  
  2019. (defadvice picture-mode-exit (before skk-ad activate)
  2020.   "SKK $B$N%P%C%U%!%m!<%+%kJQ?t$rL58z$K$7!"(Bpicture-mode-exit $B$r%3!<%k$9$k!#(B
  2021. picture-mode $B$+$i=P$?$H$-$K$=$N%P%C%U%!$G(B SKK $B$r@5>o$KF0$+$9$?$a$N=hM}!#(B"
  2022.   (if skk-mode (skk-kill-local-variables)) )
  2023.  
  2024. (defadvice undo (before skk-ad activate)
  2025.   "SKK $B%b!<%I$,(B on $B$J$i(B skk-self-insert-non-undo-count $B$r=i4|2=$9$k!#(B"
  2026.   (if skk-mode
  2027.       (setq skk-self-insert-non-undo-count 0) ))
  2028.  
  2029. (defadvice kill-buffer (around skk-ad activate)
  2030.   "SKK $B$N"'%b!<%I$@$C$?$i!"3NDj$7$F$+$i%P%C%U%!$r%-%k$9$k!#(B
  2031.   $B%P%C%U%!$N%-%k8e!"(BSKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B"
  2032.   (if skk-mode
  2033.       (and skk-henkan-on (skk-kakutei)) )
  2034.   ad-do-it
  2035.   ;; $BJL$N%P%C%U%!$XHt$V%3%^%s%I$O(B skk-mode $B$,(B nil $B$G$b%+!<%=%k?'$rD4@0$9$kI,MW(B
  2036.   ;; $B$,$"$k!#(B
  2037.   (skk-set-cursor-properly) )
  2038.  
  2039. (defadvice overwrite-mode (after skk-ad activate)
  2040.   (if skk-use-cursor-change
  2041.       (skk-change-cursor-when-ovwrt) ))
  2042.  
  2043. (defadvice eval-expression (before skk-ad activate)
  2044.   (if skk-mode (skk-mode-off)) )
  2045.  
  2046. (defadvice query-replace-regexp  (before skk-ad activate)
  2047.   "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B"
  2048.   (add-hook 'minibuffer-setup-hook 'skk-setup-minibuffer) )
  2049.  
  2050. (defadvice query-replace (before skk-ad activate)
  2051.   "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B"
  2052.   (add-hook 'minibuffer-setup-hook 'skk-setup-minibuffer) )
  2053.  
  2054. (defadvice goto-line (after skk-ad activate)
  2055.   "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B"
  2056.   (and skk-mode (skk-set-cursor-properly)) )
  2057.  
  2058. (defadvice yank (after skk-ad activate)
  2059.   "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B"
  2060.   (and skk-mode (skk-set-cursor-properly)) )
  2061.  
  2062. (defadvice yank-pop (after skk-ad activate)
  2063.   "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B"
  2064.   (and skk-mode (skk-set-cursor-properly)) )
  2065.  
  2066. (defadvice recenter (after skk-ad activate)
  2067.   "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B"
  2068.   (and skk-mode (skk-set-cursor-properly)) )
  2069.  
  2070. ;; $BJL$N%P%C%U%!$XHt$V%3%^%s%I$O(B skk-mode $B$,(B nil $B$G$b%+!<%=%k?'$rD4@0$9$kI,MW$,(B
  2071. ;; $B$"$k!#(B
  2072. (defadvice bury-buffer (after skk-ad activate)
  2073.   "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B"
  2074.   (skk-set-cursor-properly) )
  2075.  
  2076. (defadvice switch-to-buffer (after skk-ad activate)
  2077.   "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B"
  2078.   (skk-set-cursor-properly) ) 
  2079.  
  2080. ;; cover to hilit19 functions.
  2081. ;; forward advice $B$H(B automatic advice activation $B5!G=$,$"$k$+$i!"(Bhilit19.el 
  2082. ;; $B$N%m!<%IA0$K(B defadvice $B$7$F$bBg>fIW!#(B
  2083. ;;(if (not (fboundp 'hilit-add-pattern))
  2084. ;;    nil
  2085. (defadvice hilit-yank (after skk-ad activate)
  2086.   "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B"
  2087.   (and skk-mode (skk-set-cursor-properly)) )
  2088.  
  2089. (defadvice hilit-yank-pop (after skk-ad activate)
  2090.   "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B"
  2091.   (and skk-mode (skk-set-cursor-properly)) )
  2092.  
  2093. (defadvice hilit-recenter (after skk-ad activate)
  2094.   "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B"
  2095.   (and skk-mode (skk-set-cursor-properly)) )
  2096.  
  2097. (defadvice execute-extended-command (after skk-ad activate)
  2098.   "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B"
  2099.   (skk-set-cursor-properly) )
  2100.  
  2101. (defadvice pop-to-buffer (after skk-ad activate)
  2102.   "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B"
  2103.   (skk-set-cursor-properly) )
  2104.  
  2105. ;; abort-recursive-edit $B$G$O!"(Bafter original command $B$X0\9T$9$kA0$K%"%\!<%H(B
  2106. ;; $B$7$F$7$^$&!#(B
  2107. ;;(defadvice abort-recursive-edit (after skk-ad activate)
  2108. ;;  "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B"
  2109. ;;  (skk-set-cursor-properly) )
  2110. ;;
  2111. (defadvice abort-recursive-edit (before skk-ad activate)
  2112.   "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B"
  2113.    ;; $BJ#?t$N(B window $B$r3+$$$F$$$k>l9g$J$I$O!"8mF0:n$N2DG=@-$"$j!#(B
  2114.   (with-current-buffer (skk-minibuffer-origin)
  2115.     (skk-set-cursor-properly) ))
  2116.  
  2117. (defadvice other-window (after skk-ad activate)
  2118.   "SKK $B$N%b!<%I$K=>$$%+!<%=%k$N?'$rJQ$($k!#(B"
  2119.   (skk-set-cursor-properly) )
  2120.  
  2121. (if skk-xemacs
  2122.     ;; XEmacs has minibuffer-keyboard-quit that has nothing to do with delsel.
  2123.     (defadvice minibuffer-keyboard-quit (around skk-ad activate)
  2124.       (cond ((or (string= skk-henkan-key "") (not skk-henkan-on))
  2125.              (with-current-buffer (skk-minibuffer-origin)
  2126.                (skk-set-cursor-properly) )
  2127.              ad-do-it )
  2128.             (skk-henkan-active
  2129.              (setq skk-henkan-count 0)
  2130.              (if (and skk-delete-okuri-when-quit skk-henkan-okurigana)
  2131.                  (let ((count (/ (length skk-henkan-okurigana) skk-kanji-len)))
  2132.                    (skk-previous-candidate)
  2133.                    ;; $B$3$3$G$O(B delete-backward-char $B$KBhFs0z?t$rEO$5$J$$J}$,%Y%?!<!)(B
  2134.                    (delete-backward-char count) )
  2135.                (skk-previous-candidate) ))
  2136.             (t (if (> (point) skk-henkan-start-point)
  2137.                    (delete-region (point) skk-henkan-start-point) )
  2138.                (skk-kakutei) )))
  2139.     (defadvice minibuffer-keyboard-quit (around skk-ad activate)
  2140.       ;; for delsel.el
  2141.       (if (and skk-mode
  2142.                (not (and
  2143.                      delete-selection-mode transient-mark-mode mark-active )))
  2144.           (keyboard-quit)
  2145.         ad-do-it )))
  2146.  
  2147. ;;;; mode setup
  2148.  
  2149. ;;;###skk-autoload
  2150. (defun skk-mode (&optional arg)
  2151.   "$BF|K\8lF~NO%b!<%I!#(B
  2152. $B%^%$%J!<%b!<%I$N0l<o$G!"%*%j%8%J%k$N%b!<%I$K$O1F6A$rM?$($J$$!#(B
  2153. $BIi$N0z?t$rM?$($k$H(B SKK $B%b!<%I$+$iH4$1$k!#(B
  2154.  
  2155. An input mode for Japanese, converting romanized phonetic strings to kanji.
  2156.  
  2157. A minor mode, it should not affect the use of any major mode or
  2158. orthogonal minor modes.
  2159.  
  2160. In the initial SKK mode, hiragana submode, the mode line indicator is 
  2161. $B!V$+$J!W(B.  Lowercase romaji entry is automatically converted to
  2162. hiragana where possible.  The lowercase characters `q' and `l' change
  2163. submodes of SKK, and `x' is used as a prefix indicating a small kana.
  2164.  
  2165. `q' is used to toggle between hiragana and katakana (mode line
  2166. indicator $B!V%+%J!W(B) entry submodes.
  2167.  
  2168. `l' is used to enter ASCII submode (mode line indicator \"SKK\").
  2169. Uppercase `L' enters zenkaku (wide) ASCII submode (mode line indicator 
  2170. $B!VA41Q!W(B).  `\C-j' returns to hiragana submode from either ASCII submode.
  2171.  
  2172. Kanji conversion is complex, but the basic principle is that the user
  2173. signals the appropriate stem to be matched against dictionary keys by
  2174. the use of uppercase letters.  Because SKK does not use grammatical
  2175. information, both the beginning and the end of the stem must be marked.
  2176.  
  2177. For non-inflected words (eg, nouns) consisting entirely of kanji, the
  2178. simplest way to invoke conversion is to enter the reading of the kanji,
  2179. the first character only in uppercase.  A leading $B!V"&!W(B indicates that
  2180. kanji conversion is in progress.  After entering the reading, press 
  2181. space.  This invokes dictionary lookup, and the hiragana reading will be
  2182. redisplayed in kanji as the first candidate.  Pressing space again gives
  2183. the next candidate.  Further presses of space produce further candidates,
  2184. as well as a list of the next few candidates in the minibuffer.  Eg,
  2185. \"Benri\" => $B!V"&$Y$s$j!W(B, and pressing space produces $B!V"'JXMx!W(B (the solid 
  2186. triangle indicates that conversion is in progress).  Backspace steps 
  2187. through the candidate list in reverse.
  2188.  
  2189. A candidate can be accepted by pressing `\C-j', or by entering a
  2190. self-inserting character.  (Unlike other common Japanese input methods,
  2191. RET not only accepts the current candidate, but also inserts a line
  2192. break.)
  2193.  
  2194. Inflected words (verbs and adjectives), like non-inflected words, begin
  2195. entry with a capital letter.  However, for these words the end of the
  2196. kanji string is signaled by capitalizing the next mora.  Eg, \"TuyoI\"
  2197. => $B!V"'6/$$!W(B.  If no candidate is available at that point, the inflection
  2198. point will be indicated with an asterisk \"*\", and trailing characters
  2199. will be displayed until a candidate is recognized.  It will be
  2200. immediately displayed (pressing space is not necessary).  Space and
  2201. backspace are used to step forward and backward through the list of 
  2202. candidates.
  2203.  
  2204. For more information, see the `skk' topic in Info.  (Japanese only.)
  2205.  
  2206. A tutorial is available in Japanese or English via \"M-x skk-tutorial\".
  2207. Use a prefix argument to be prompted for the language.  The default is
  2208. system-dependent.
  2209. "
  2210.  
  2211.   (interactive "P")
  2212.   (setq skk-mode (cond ((null arg) (not skk-mode))
  2213.                        ;; - $B$O(B -1 $B$KJQ49$5$l$k!#(B
  2214.                        ((> (prefix-numeric-value arg) 0) t) ))
  2215.   (if (not skk-mode)
  2216.       ;; exit skk-mode
  2217.       (progn
  2218.         (let ((skk-mode t)) (skk-kakutei))
  2219.         (skk-mode-off) )
  2220.     ;; enter skk-mode
  2221.     (if (not skk-mode-invoked)
  2222.         ;; enter skk-mode for the first time in this session
  2223.         (progn
  2224.           (setq skk-mode-invoked t)
  2225.           (skk-setup-init-file)
  2226.           (load skk-init-file t)
  2227.           (if skk-keep-record
  2228.               (skk-create-file
  2229.                skk-record-file
  2230.                (if skk-japanese-message-and-error
  2231.                    "SKK $B$N5-O?MQ%U%!%$%k$r:n$j$^$7$?(B"
  2232.                  "I have created an SKK record file for you" )))
  2233.           (skk-create-file
  2234.            skk-jisyo (if skk-japanese-message-and-error
  2235.                          "SKK $B$N6u<-=q$r:n$j$^$7$?(B"
  2236.                        "I have created an empty SKK Jisyo file for you" ))
  2237.           (skk-get-jisyo-buffer skk-jisyo 'nomsg) ))
  2238.     ;;$B0J2<$O(B skk-mode $B$KF~$k$?$S$KKhEY%3!<%k$5$l$k%3!<%I!#(B
  2239.     ;;(if (boundp 'disable-undo)
  2240.     ;;    (make-local-variable 'disable-undo) )
  2241.     (cond (skk-use-vip (skk-vip-mode))
  2242.           (skk-use-viper
  2243.            (require 'skk-viper)
  2244.            (funcall skk-viper-normalize-map-function) ))
  2245.     (if (and (not (featurep 'skk-server))
  2246.              (or (and (boundp 'skk-server-host) skk-server-host)
  2247.                  (and (boundp 'skk-servers-list) skk-servers-list)
  2248.                  (getenv "SKKSERVER")
  2249.                  (getenv "SKKSERV") ))
  2250.         (require 'skk-server) )
  2251.     ;; $B%f!<%6!<JQ?t$K4X$9$k$b$N$O!"%f!<%6!<$,$$$D!"$=$l$i$NJQ?t$rJQ99$9$k$+M=(B
  2252.     ;; $BB,$,IU$+$J$$$N$G!"(Bskk-mode $B$KF~$k$?$S$K@_Dj$7$J$*$7$F$$$k!#(B
  2253.     (if (featurep 'skk-server)
  2254.         ;; skk-search-server $B$O%5!<%P!<$,Mn$A$F$b;H$($k$N$G!"30$5$J$$!#(B
  2255.         (skk-adjust-search-prog-list-for-server-search 'non-del) )
  2256.     (if skk-auto-okuri-process
  2257.         (skk-adjust-search-prog-list-for-auto-okuri) )
  2258.     (if skk-use-relation
  2259.     (progn
  2260.      (require 'skk-attr)
  2261.      (setq skk-search-prog-list
  2262.            (cons '(skk-search-relation) skk-search-prog-list) )))
  2263.     (skk-setup-delete-selection-mode)
  2264.     (skk-setup-special-midashi-char)
  2265.     (skk-setup-auto-paren)
  2266.     (skk-adjust-user-option)
  2267.     (define-key minibuffer-local-map skk-kakutei-key 'skk-kakutei)
  2268.     ;;(define-key minibuffer-local-map "\C-m" 'skk-newline)
  2269.     (define-key minibuffer-local-completion-map skk-kakutei-key 'skk-kakutei)
  2270.     ;;(define-key minibuffer-local-completion-map "\C-m" 'skk-newline)
  2271.     ;; XEmacs doesn't have minibuffer-local-ns-map
  2272.     (if (boundp 'minibuffer-local-ns-map)
  2273.         ;;(define-key minibuffer-local-ns-map "\C-m" 'skk-newline)
  2274.         (define-key minibuffer-local-ns-map skk-kakutei-key 'skk-kakutei) )
  2275.     (skk-j-mode-on)
  2276.     (run-hooks 'skk-mode-hook) ))
  2277.  
  2278. ;;;###skk-autoload
  2279. (defun skk-auto-fill-mode (&optional arg)
  2280.   "$BF|K\8lF~NO%b!<%I!#<+F0@^$jJV$75!G=IU$-!#(B
  2281. $B%^%$%J!<%b!<%I$N0l<o$G!"%*%j%8%J%k$N%b!<%I$K$O1F6A$rM?$($J$$!#(B
  2282. $B@5$N0z?t$rM?$($k$H!"6/@)E*$K(B auto-fill-mode $B5Z$S(B SKK $B%b!<%I$KF~$k!#(B
  2283. $BIi$N0z?t$rM?$($k$H(B auto-fill-mode $B5Z$S(B SKK $B%b!<%I$+$iH4$1$k!#(B"
  2284.   (interactive "P")
  2285.   (let ((auto-fill
  2286.          (cond ((null arg) (not auto-fill-function))
  2287.                ((> (prefix-numeric-value arg) 0) t) )))
  2288.     (auto-fill-mode (if auto-fill 1 -1))
  2289.     (skk-mode arg)
  2290.     (skk-set-cursor-color (if skk-mode
  2291.                               skk-hirakana-cursor-color
  2292.                             skk-default-cursor-color ))
  2293.     (run-hooks 'skk-auto-fill-mode-hook) ))
  2294.  
  2295. (defun skk-kill-emacs-without-saving-jisyo (&optional query)
  2296.   "SKK $B<-=q$r%;!<%V$7$J$$$G!"(BEmacs $B$r=*N;$9$k!#(B
  2297. skk-before-kill-emacs-hook $B$r<B9T$7$F$+$i(B Emacs $B$r%-%k$9$k!#(B"
  2298.   (interactive "P")
  2299.   ;; format $B$r0z?t$K;}$?$;$?>l9g$O!"(Bskk-yes-or-no-p $B$r;H$&$H$+$($C$F>iD9$K$J$k!#(B
  2300.   (if (yes-or-no-p
  2301.        (format (if skk-japanese-message-and-error
  2302.                    "$B<-=q$NJ]B8$r$;$:$K(B %s $B$r=*N;$7$^$9!#NI$$$G$9$+!)(B"
  2303.                  "Do you really wish to kill %s without saving Jisyo? " )
  2304.                (cond (skk-mule "Mule")
  2305.                      (skk-xemacs "XEmacs")
  2306.                      (t "Emacs") )))
  2307.       (let ((buff (skk-get-jisyo-buffer skk-jisyo 'nomsg)))
  2308.         (if buff
  2309.             (progn (set-buffer buff)
  2310.                    (set-buffer-modified-p nil)
  2311.                    (kill-buffer buff) ))
  2312.         (run-hooks 'skk-before-kill-emacs-hook)
  2313.         (ad-remove-advice 'save-buffers-kill-emacs 'before 'skk-ad)
  2314.         (ad-activate 'save-buffers-kill-emacs)
  2315.         (save-buffers-kill-emacs query) )))
  2316.  
  2317. (defun skk-setup-init-file ()
  2318.   ;; skk-byte-compile-init-file $B$,(B non-nil $B$N>l9g$G!"(Bskk-init-file $B$r%P%$%H%3(B
  2319.   ;; $B%s%Q%$%k$7$?%U%!%$%k$,B8:_$7$J$$$+!"$=$N%P%$%H%3%s%Q%$%k:Q%U%!%$%k$h$j(B 
  2320.   ;; skk-init-file $B$NJ}$,?7$7$$$H$-$O!"(Bskk-init-file $B$r%P%$%H%3%s%Q%$%k$9$k!#(B
  2321.   ;;
  2322.   ;; skk-byte-compile-init-file $B$,(B nil $B$N>l9g$G!"(Bskk-init-file $B$r%P%$%H%3%s%Q(B
  2323.   ;; $B%$%k$7$?%U%!%$%k$h$j(B skk-init-file $B$NJ}$,?7$7$$$H$-$O!"$=$N%P%$%H%3%s%Q%$(B
  2324.   ;; $B%k:Q%U%!%$%k$r>C$9!#(B
  2325.   (save-match-data
  2326.     (let* ((init-file (expand-file-name skk-init-file))
  2327.            (elc (concat init-file 
  2328.                         (if (string-match "\\.el$" init-file)
  2329.                             "c"
  2330.                           ".elc" ))))
  2331.       (if skk-byte-compile-init-file
  2332.           (if (and (file-exists-p init-file)
  2333.                    (or (not (file-exists-p elc))
  2334.                        (file-newer-than-file-p init-file elc) ))
  2335.               (save-window-excursion ;; for keep window configuration.
  2336.                 (skk-message "%s $B$r%P%$%H%3%s%Q%$%k$7$^$9!#(B"
  2337.                              "Byte-compile %s"
  2338.                              skk-init-file )
  2339.                 (sit-for 2)
  2340.                 (byte-compile-file init-file) ))
  2341.         (if (and (file-exists-p init-file)
  2342.                  (file-exists-p elc)
  2343.                  (file-newer-than-file-p init-file elc) )
  2344.             (delete-file elc) )))))
  2345.  
  2346. ;;
  2347. ;;(skk-setup-special-midashi-char skk-minibuff-map)
  2348.  
  2349. ;;;###skk-autoload
  2350. (defun skk-emulate-original-map (arg)
  2351.   ;; $B%-!<F~NO$KBP$7$F!"(BSKK $B$N%b!<%I$G$O$J$/!"(BEmacs $B$N%*%j%8%J%k$N%-!<3d$jIU$1$G(B
  2352.   ;; $B%3%^%s%I$r<B9T$9$k!#(B
  2353.   (let ((prefix-arg arg)
  2354.         (keys (skk-command-key-sequence (this-command-keys) this-command)) )
  2355.     (if (not keys)
  2356.         ;; no alternative commands.  may be invoked by M-x.
  2357.         nil
  2358.       (let (skk-mode skk-ascii-mode skk-j-mode skk-abbrev-mode skk-zenkaku-mode
  2359.                      command )
  2360.         (setq command (key-binding keys))
  2361.         (if (eq command this-command)
  2362.             ;; avoid recursive calling of skk-emulate-original-map.
  2363.             nil
  2364.           ;; if no bindings are found, call `undefined'.  it's
  2365.           ;; original behaviour.
  2366.           (skk-cancel-undo-boundary)
  2367.           (command-execute (or command (function undefined))))))))
  2368.  
  2369. (defun skk-command-key-sequence (key command)
  2370.   ;; KEY $B$+$i(B universal arguments $B$r<h$j=|$-!"(BCOMMAND $B$r<B9T$9$k%-!<$rJV$9!#(B
  2371.   ;; `execute-extended-command' $B$K$h$C$F%3%^%s%I$,<B9T$5$l$?>l9g$O!"(Bnil $B$rJV$9!#(B
  2372.   (while (not (or (zerop (length key))
  2373.                   (eq command (key-binding key))))
  2374.     (setq key (vconcat (cdr (append key nil)))))
  2375.   (and (not (zerop (length key))) key))
  2376.  
  2377. (defun skk-setup-special-midashi-char ()
  2378.   ;; skk-special-midashi-char-list $B$K;XDj$5$l$?(B char $B$r(B skk-j-mode-map $B$N(B
  2379.   ;; skk-set-henkan-point $B$K3d$jIU$1$k!#(Bskk-special-midashi-char-list $B$K;XDj$5(B
  2380.   ;; $B$l$?(B char $B$G!"@\F,<-!"@\Hx<-$NF~NO$r2DG=$K$9$k$?$a$N=hM}!#(B
  2381.   (let ((strlist (mapcar 'char-to-string skk-special-midashi-char-list))
  2382.         ;; Use default-value for Viper.  It localizes minor-mode-map-alist.
  2383.         (map (cdr (assq 'skk-j-mode (default-value 'minor-mode-map-alist))))
  2384.         str )
  2385.     (while strlist
  2386.       (setq str (car strlist))
  2387.       (if (not (eq 'skk-set-henkan-point (lookup-key map str)))
  2388.           (define-key map str 'skk-set-henkan-point) )
  2389.       (setq strlist (cdr strlist)) )))
  2390.  
  2391. (defun skk-setup-delete-selection-mode ()
  2392.   ;; Delete Selection $B%b!<%I$,(B SKK $B$r;H$C$?F|K\8lF~NO$KBP$7$F$b5!G=$9$k$h$&$K(B
  2393.   ;; $B%;%C%H%"%C%W$9$k!#(B
  2394.   (if (and (featurep 'delsel)
  2395.            (not (get 'skk-insert-a 'delete-selection)) )
  2396.       (progn
  2397.         ;;(put 'skk-delete-backward-char 'delete-selection 'supersede)
  2398.         (mapcar (function (lambda (func) (put func 'delete-selection t)))
  2399.                 '(skk-input-by-code-or-menu
  2400.                   skk-insert-comma
  2401.                   skk-insert-period
  2402.                   skk-kana-input
  2403.                   ;;skk-newline
  2404.                   ;;skk-set-henkan-point-subr
  2405.                   skk-set-henkan-point
  2406.                   skk-self-insert
  2407.                   skk-today )))))
  2408.  
  2409. (defun skk-setup-auto-paren ()
  2410.   ;; skk-auto-paren-string-alist $B$NCf$+$i!"(Bskk-special-midashi-char-list
  2411.   ;; $B$NMWAG$K4XO"$9$k$b$N$r<h$j=|$/!#(B
  2412.   ;; $B$^$?!"(Bskk-auto-paren-string-alist $B$N3FMWAG$N(B car $B$NJ8;z$,(B ascii char $B$G$"(B
  2413.   ;; $B$k>l9g$O!"(Bskk-input-vector $B$N3:Ev$N>l=j(B ($B$=$N(B ascii char $B$rI>2A$7$??t$,%$(B
  2414.   ;; $B%s%G%/%9$H$J$k(B) $B$K$=$NJ8;z$r=q$-9~$`(B ($BK\Mh$O(B ascii char $B$O(B
  2415.   ;; skk-input-vector $B$K=q$/I,MW$,$J$$$,!"(Bskk-auto-paren-string-alist $B$K;XDj$5(B
  2416.   ;; $B$l$?BP$K$J$kJ8;z$NA^F~$N$?$a$K$O!"%-!<$H$J$kJ8;z$r=q$$$F$*$/I,MW$,$"$k(B)$B!#(B
  2417.   (if (null skk-auto-paren-string-alist)
  2418.       nil
  2419.     (let ((strlist (mapcar 'char-to-string skk-special-midashi-char-list))
  2420.           cell str alist )
  2421.       (while strlist
  2422.         (setq cell (assoc (car strlist) skk-auto-paren-string-alist))
  2423.         (if cell
  2424.             ;; assoc $B$GCj=P$7$?(B cell $B$rD>@\;XDj$7$F$$$k$N$G!"(Bdelete $B$G$J$/$H$bBg(B
  2425.             ;; $B>fIW!#(B
  2426.             (setq skk-auto-paren-string-alist
  2427.                   (delq cell skk-auto-paren-string-alist) ))
  2428.         (setq strlist (cdr strlist)) )
  2429.       (setq alist skk-auto-paren-string-alist)
  2430.       (while alist
  2431.         (setq str (car (car alist)))
  2432.         (if (and (eq (string-width str) 1)
  2433.                  ;; $B4{$K%f!<%6!<$,;XDj$7$F$$$k>l9g$O!"$I$s$JJ8;z$G$"$C$F$b(B ($B%-!<(B
  2434.                  ;; $B$H$J$kJ8;z$H$O0c$C$F$$$F$b(B)$B!"2?$b$7$J$$!#(B
  2435.                  (not (aref skk-input-vector (string-to-char str))) )
  2436.             (aset skk-input-vector (string-to-char str) str) )
  2437.         (setq alist (cdr alist)) ))))
  2438.  
  2439. (defun skk-adjust-user-option ()
  2440.   ;; $BN>N)$G$-$J$$%*%W%7%g%s$ND4@0$r9T$J$&!#(B
  2441.   (if skk-process-okuri-early
  2442.       ;; skk-process-okuri-early $B$NCM$,(B non-nil $B$G$"$k$H$-$K2<5-$NCM$,(B non-nil
  2443.       ;; $B$G$"$l$P@5>o$KF0$+$J$$$N$G$3$NJQ?t$NM%@h=g0L$r9b$/$7$?!#(B
  2444.       (setq skk-kakutei-early nil
  2445.             skk-auto-okuri-process nil
  2446.             skk-henkan-okuri-strictly nil
  2447.         skk-henkan-strict-okuri-precedence nil)))
  2448.  
  2449. (defun skk-try-completion (arg)
  2450.   "$B"&%b!<%I$G8+=P$78l$NJd40$r9T$&!#(B
  2451. $B$=$l0J30$N%b!<%I$G$O!"%*%j%8%J%k$N%-!<3d$jIU$1$N%3%^%s%I$r%(%_%e%l!<%H$9$k!#(B"
  2452.   (interactive "P")
  2453.   (if (and skk-henkan-on (not skk-henkan-active))
  2454.       (progn
  2455.         (setq this-command 'skk-completion)
  2456.         (skk-completion (not (eq last-command 'skk-completion))) )
  2457.     (skk-emulate-original-map arg) ))
  2458.  
  2459. (defun skk-ascii-mode ()
  2460.   "SKK $B$N%b!<%I$r(B ascii $B%b!<%I$KJQ99$9$k!#(B"
  2461.   (interactive)
  2462.   (skk-kakutei)
  2463.   (skk-ascii-mode-on) )
  2464.  
  2465. (defun skk-zenkaku-mode ()
  2466.   "SKK $B$N%b!<%I$rA43Q1Q;zF~NO%b!<%I$KJQ99$9$k!#(B"
  2467.   (interactive)
  2468.   (skk-kakutei)
  2469.   (skk-zenkaku-mode-on) )
  2470.  
  2471. (defun skk-abbrev-mode ()
  2472.   "ascii $BJ8;z$r%-!<$K$7$?JQ49$r9T$&$?$a$NF~NO%b!<%I!#(B"
  2473.   (interactive "*")
  2474.   (if (and skk-henkan-on (not skk-henkan-active))
  2475.       (skk-error "$B4{$K"&%b!<%I$KF~$C$F$$$^$9(B" "Already in $B"&(B mode") )
  2476.   (skk-kakutei)
  2477.   (skk-set-henkan-point-subr)
  2478.   (skk-abbrev-mode-on) )
  2479.  
  2480. (defun skk-toggle-kana (arg)
  2481.   "$B$R$i$,$J%b!<%I$H%+%?%+%J%b!<%I$r%H%0%k$G@Z$jBX$($k!#(B
  2482. $B%+%?%+%J%b!<%I$GJQ49$r9T$J$&$H$-$K!"Aw$j2>L>$r%+%?%+%J$KJQ49$7$?$/$J$$$H$-$O!"(B
  2483. skk-convert-okurigana-into-katakana $B$NCM$r(B non-nil $B$K$9$k!#(B
  2484.  
  2485. $B"&%b!<%I$G$O!"(Bskk-henkan-start-point ($B"&$ND>8e(B) $B$H%+!<%=%k$N4V$NJ8;zNs$r(B
  2486.  
  2487.     $B$R$i$,$J(B <=> $B%+%?%+%J(B
  2488.     $BA43Q1Q?t;z(B <=> ascii
  2489.  
  2490. $B$N$h$&$KJQ49$9$k!#(B"
  2491.   (interactive "P")
  2492.   (cond ((and skk-henkan-on (not skk-henkan-active))
  2493.          (let (char)
  2494.            (skk-save-point
  2495.              (goto-char skk-henkan-start-point)
  2496.              ;; "$B!<(B" $B$G$OJ8;z<oJL$,H=JL$G$-$J$$$N$G!"%]%$%s%H$r?J$a$k!#(B
  2497.              (while (looking-at "$B!<(B")
  2498.                (skk-forward-char 1) )
  2499.              (setq char (skk-what-char-type)) )
  2500.            (skk-set-marker skk-henkan-end-point (point))
  2501.            (cond ((eq char 'hirakana)
  2502.                   (skk-katakana-henkan arg) )
  2503.                  ((eq char 'katakana)
  2504.                   (skk-hiragana-henkan arg) )
  2505.                  ((eq char 'ascii)
  2506.                   (skk-zenkaku-henkan arg) )
  2507.                  ((eq char 'zenkaku)
  2508.                   (skk-ascii-henkan arg) ))))
  2509.         ((and (skk-in-minibuffer-p) (not skk-j-mode))
  2510.          ;; $B%_%K%P%C%U%!$X$N=iFMF~;~!#(B
  2511.          (skk-j-mode-on) )
  2512.         (t (setq skk-katakana (not skk-katakana))) )
  2513.   (skk-kakutei)
  2514.   (if skk-katakana
  2515.       (progn
  2516.         (setq skk-input-mode-string skk-katakana-mode-string)
  2517.         (skk-set-cursor-color skk-katakana-cursor-color) )
  2518.     (setq skk-input-mode-string skk-hirakana-mode-string)
  2519.     (skk-set-cursor-color skk-hirakana-cursor-color) )
  2520.   (force-mode-line-update) )
  2521.  
  2522. (defun skk-misc-for-picture ()
  2523.   ;; picture-mode $B$XF~$C$?$H$-$K(B SKK $B$r@5>o$KF0$+$9$?$a$KI,MW$J=hM}$r9T$J$&!#(B
  2524.   ;; edit-picture-hook $B$K(B add-hook $B$7$F;HMQ$9$k!#(B
  2525.   ;;
  2526.   ;; picture-mode $B$G(B SKK $B$r;HMQ$74A;zF~NO$r$7$?>l9g$K!"(BBS $B$GA43QJ8;z$,>C$;$J$$(B
  2527.   ;; $B$N$O!"(BSKK $B$NIT6q9g$G$O$J$/!"(Bpicture.el $B$NLdBj(B (move-to-column-force $B4X?t(B
  2528.   ;; $B$NCf$G;HMQ$7$F$$$k(B move-to-column $B$GA43QJ8;z$rL5;k$7$?%+%i%`?t$,M?$($i$l(B
  2529.   ;; $B$?$H$-$K%+!<%=%k0\F0$,$G$-$J$$$+$i(B) $B$G$"$k!#>C$7$?$$J8;z$K%]%$%s%H$r9g$o(B
  2530.   ;; $B$;!"(BC-c C-d $B$G0lJ8;z$E$D>C$9$7$+J}K!$O$J$$!#(B
  2531.   (if skk-mode
  2532.       ;; SKK $B5/F0A0$N>uBV$KLa$9!#(B
  2533.       (skk-kill-local-variables) ))
  2534.  
  2535. (defun skk-kill-local-variables ()
  2536.   ;; SKK $B4XO"$N%P%C%U%!%m!<%+%kJQ?t$rL58z$K$9$k!#(B
  2537.   ;; $B4{B8$N%P%C%U%!$r(B picture mode $B$K$7$?$H$-!"(Bpicture-mode $B4X?t$O(B
  2538.   ;; kill-all-local-variables $B4X?t$r8F$P$J$$$N$G!"(BSKK $B4XO"$N%P%C%U%!%m!<%+%k(B
  2539.   ;; $BJQ?t$,85$N%P%C%U%!$NCM$N$^$^$K$J$C$F$7$^$&!#$=$3$G!"(Bpicture mode $B$KF~$C$?(B
  2540.   ;; $B$H$-$K%U%C%/$rMxMQ$7$F$3$l$i$N%P%C%U%!%m!<%+%kJQ?t$r(B kill $B$9$k!#(B
  2541.   ;; RMS $B$O(B picture-mode $B$G(B kill-all-local-variables $B4X?t$r8F$P$J$$$N$O!"%P%0(B
  2542.   ;; $B$G$O$J$$!"$H8@$C$F$$$?!#(B
  2543.   (if (eq (nth 1 mode-line-format) 'skk-mode-line)
  2544.       (setq mode-line-format (delq 'skk-mode-line mode-line-format) ))
  2545.   (let ((lv (buffer-local-variables))
  2546.         v vstr )
  2547.     (while lv
  2548.       (setq v (car (car lv))
  2549.             lv (cdr lv)
  2550.             vstr (prin1-to-string v) )
  2551.       (if (and
  2552.            (> (length vstr) 3) (string= "skk-" (substring vstr 0 4)) )
  2553.           (kill-local-variable v) ))))
  2554.  
  2555. ;;;; kana inputting functions
  2556.  
  2557. (defun skk-insert (table)
  2558.   ;; skk-prefix $B$r%-!<$H$7$F!"O"A[%j%9%H(B TABLE $B$+$iJ8;zNs$rC5$7$FF~NO$9$k!#(B
  2559.   (let ((char (assoc skk-prefix table)))
  2560.     (if (null char)
  2561.         (progn
  2562.           ;; skk-prefix not found in the table
  2563.           (setq skk-prefix "")
  2564.           (skk-unread-event (skk-character-to-event last-command-char)) )
  2565.       (if (and skk-henkan-active skk-kakutei-early
  2566.                (not skk-process-okuri-early) )
  2567.           (skk-kakutei) )
  2568.       (skk-insert-str (if skk-katakana (nthcdr 2 char) (nth 1 char)))
  2569.       (if skk-okurigana
  2570.           (skk-set-okurigana)
  2571.         (setq skk-prefix "") )
  2572.       (if (not skk-henkan-on) (skk-do-auto-fill)) )))
  2573.  
  2574. (defun skk-insert-str (str)
  2575.   ;; skk-insert $B$N%5%V%k!<%A%s!#(BSTR $B$rA^F~$9$k!#I,MW$G$"$l$P(B
  2576.   ;; self-insert-after-hook $B$r%3!<%k$9$k!#(Boverwrite-mode $B$G$"$l$P!"E,@Z$K>e=q$-(B
  2577.   ;; $B$r9T$&!#$3$N4X?t$O!"(Bskk-vip.el $B$G>e=q$-$5$l$k(B 
  2578.   (skk-cancel-undo-boundary)
  2579.   (skk-insert-and-inherit str)
  2580.   (if (and skk-henkan-on (not skk-henkan-active))
  2581.       (if (and skk-auto-start-henkan (not skk-okurigana))
  2582.           (skk-auto-start-henkan str) )
  2583.     (if (and (boundp 'self-insert-after-hook) self-insert-after-hook)
  2584.         (funcall self-insert-after-hook (- (point) (length str)) (point)) )
  2585.     (if overwrite-mode
  2586.         (skk-del-char-with-pad (skk-ovwrt-len (string-width str))) )))
  2587.  
  2588. (defun skk-auto-start-henkan (str)
  2589.   ;; skk-auto-start-henkan-keyword-list $B$NMWAG$NJ8;zNs$rA^F~$7$?$H$-$K<+F0E*$K(B 
  2590.   ;; ($B%9%Z!<%9$rBG80$7$J$/$H$b(B) $BJQ49$r3+;O$9$k!#%(!<!_%$%=%U%H<R$N(B MSDOS $BMQ(B $B$N(B 
  2591.   ;; FEP$B!"(BWX2+ $BIw!#(B
  2592.   (if (member str skk-auto-start-henkan-keyword-list)
  2593.       (skk-save-point
  2594.         (skk-backward-char 1)
  2595.         (if (> (point) skk-henkan-start-point)
  2596.             (let ((skk-prefix ""))
  2597.               (skk-start-henkan (prefix-numeric-value current-prefix-arg)) )))))
  2598.  
  2599. (defun skk-ovwrt-len (len)
  2600.   ;; $B>e=q$-$7$FNI$$D9$5$rJV$9!#(B
  2601.   ;; $B$3$N4X?t$O!"(Bskk-vip.el $B$G>e=q$-$5$l$k(B (<(skk-vip.el/skk-ovwrt-len)>)$B!#(B
  2602.   (min (string-width
  2603.         (skk-buffer-substring (point) (skk-save-point (end-of-line) (point))) )
  2604.        len ))
  2605.  
  2606. (defun skk-del-char-with-pad (length)
  2607.   ;; $BD9$5(B LENGTH $B$NJ8;z$r>C5n$9$k!#D4@0$N$?$a!"I,MW$G$"$l$P!"KvHx$K%9%Z!<%9$r(B
  2608.   ;; $BA^F~$9$k!#(B
  2609.   (let ((p (point)) (len 0))
  2610.     (while (< len length)
  2611.       (forward-char 1)
  2612.       (setq len (string-width (skk-buffer-substring (point) p))))
  2613.     (delete-region p (point))
  2614.     (or (eq length len)
  2615.         (progn
  2616.           (insert " ")
  2617.           (backward-char 1)))))
  2618.  
  2619. (defun skk-cancel-undo-boundary ()
  2620.   ;; skk-insert-[aiue], skk-insert-comma, skk-insert-period, skk-kana-input,
  2621.   ;; skk-self-insert, skk-set-henkan-point, skk-zenkaku-insert $B$GO"B3$7$FF~NO(B
  2622.   ;; $B$5$l$?(B 20 $BJ8;z$r(B 1 $B2s$N%"%s%I%%$NBP>]$H$9$k!#(B`20' $B$O(B keyboard.c $B$KDj$a$i(B
  2623.   ;; $B$l$?%^%8%C%/%J%s%P!<!#(BMule-2.3 $BE:IU$N(B egg.el $B$r;29M$K$7$?!#(B
  2624.   (if (and (< skk-self-insert-non-undo-count 20)
  2625.            (memq last-command
  2626.                  '(
  2627.                    ;; SKK abbrev $B%b!<%I$G$O!"%"%9%-!<J8;zF~NO$,(B Emacs $B%*%j%8%J(B
  2628.                    ;; $B%k$N(B self-insert-command $B$K$h$j9T$J$o$l$F$$$k$N$G!"(B
  2629.                    ;; skk-self-insert-non-undo-count $B$r%$%s%/%j%a%s%H$9$k$3$H(B
  2630.                    ;; $B$,$G$-$J$$$N$G!"%"%s%I%%$r%(%_%e%l!<%H$G$-$J$$!#(B
  2631.                    ;; $B$7$+$b!"%+%s%^$d%T%j%*%I$rA^F~$7$?;~E@$G!"(B
  2632.                    ;; skk-abbrev-comma $B$d(B skk-abbrev-period $B$r;H$&$3$H$K$J$k$N(B
  2633.                    ;; $B$G!"%*%j%8%J%k$N%"%s%I%%$N5!G=$bB;$J$C$F$7$^$&!#8=<BLdBj(B
  2634.                    ;; $B$H$7$F$O!"(BSKK abbrev $B%b!<%I$O>JN,7A$H$7$F$N8+=P$78l$rA^(B
  2635.                    ;; $BF~$9$k$?$a$N%b!<%I$G$"$k$N$G!"D9$$8+=P$78l$rA^F~$9$k$3$H(B
  2636.                    ;; $B$O$"$^$j$J$/!"LdBj$b>.$5$$$H9M$($i$l$k!#(B
  2637.                    ;;skk-abbrev-comma
  2638.                    ;;skk-abbrev-period
  2639.                    skk-insert-comma
  2640.                    skk-insert-period
  2641.                    skk-kana-input
  2642.                    skk-self-insert
  2643.                    ;;skk-set-henkan-point
  2644.                    skk-zenkaku-insert )))
  2645.       (progn
  2646.         (cancel-undo-boundary)
  2647.         (setq skk-self-insert-non-undo-count
  2648.               (1+ skk-self-insert-non-undo-count) ))
  2649.     (setq skk-self-insert-non-undo-count 1) ))
  2650.  
  2651. (defun skk-get-next-rule (prefix)
  2652.   (or (if (and (boundp 'skk-rom-kana-rule-tree)
  2653.            skk-rom-kana-rule-tree )
  2654.       (skk-assoc-tree prefix
  2655.               skk-rom-kana-rule-tree )
  2656.     (cdr (assoc prefix skk-rom-kana-rule-list)) )
  2657.       (if (and (boundp 'skk-standard-rom-kana-rule-tree)
  2658.            skk-standard-rom-kana-rule-tree)
  2659.       (skk-assoc-tree prefix
  2660.               skk-standard-rom-kana-rule-tree )
  2661.     (cdr (assoc prefix skk-standard-rom-kana-rule-list)) )))
  2662.  
  2663. (defun skk-get-fallback-rule (prefix)
  2664.   (cdr (assoc prefix skk-fallback-rule-alist)) )
  2665.  
  2666. (defun skk-check-postfix-rule (last)
  2667.   (let ((l skk-postfix-rule-alist)
  2668.     ret)
  2669.     (while l
  2670.       (if (eq (string-to-char last) (string-to-char (car (car l))))
  2671.       (setq ret (cons (car l) ret)) )
  2672.       (setq l (cdr l)) )
  2673.     ret ))
  2674.  
  2675. (defun skk-get-postfix-rule (prefix &optional alist)
  2676.   (let ((alist (or alist skk-postfix-rule-alist)))
  2677.     (cdr (assoc prefix alist)) ))
  2678.  
  2679. (defun skk-kana-input ()
  2680.   "$B$+$JJ8;z$NF~NO$r9T$&%k!<%A%s!#(B"
  2681.   (interactive "*")
  2682.   (combine-after-change-calls
  2683.     (if (and skk-henkan-active
  2684.              skk-kakutei-early (not skk-process-okuri-early) )
  2685.         (skk-kakutei) )
  2686.     (let ((echo-keystrokes 0)
  2687.           ;; don't echo key strokes in the minibuffer.
  2688.       last-input
  2689.       last-kana )
  2690.       (if skk-isearch-message (skk-isearch-message))
  2691.       (setq skk-prefix "")
  2692.       (skk-set-marker skk-kana-start-point (point))
  2693.       (skk-unread-event (skk-character-to-event last-command-char))
  2694.       (condition-case nil
  2695.       (let ((cont t)
  2696.         prev )
  2697.         (while cont
  2698.           (let* ((raw-event (skk-read-event))
  2699.              ;; ascii equivallence of raw-event or nil.
  2700.              (r-char (skk-event-to-character raw-event))
  2701.              input
  2702.              prefix
  2703.              next
  2704.              low )
  2705.         (if skk-debug (message "%S" r-char))
  2706.         (if r-char
  2707.             (progn
  2708.               (if (and
  2709.                (or (and
  2710.                 skk-henkan-on (not skk-henkan-active)
  2711.                 (= skk-henkan-start-point
  2712.                    skk-kana-start-point ))
  2713.                    (and
  2714.                 skk-okurigana
  2715.                 (= (1+ skk-okurigana-start-point)
  2716.                    ;; "*"
  2717.                    skk-kana-start-point )))
  2718.                (not (eq r-char (skk-downcase r-char))) )
  2719.               ;; this case takes care of the rare case where
  2720.               ;; one types two characters in upper case
  2721.               ;; consequtively.  For example, one sometimes
  2722.               ;; types "TE" when one should type "Te"
  2723.               (setq r-char (skk-downcase r-char)
  2724.                 raw-event (skk-character-to-event r-char) ))
  2725.               (setq input (skk-char-to-string r-char)
  2726.                 last-input input
  2727.                 prefix (concat skk-prefix input)
  2728.                 next (skk-get-next-rule prefix) )))
  2729.         (if skk-debug (message "%S" next))
  2730.         (if skk-isearch-message (skk-isearch-message))
  2731.         (if next
  2732.             (let ((newprefix (car next))
  2733.               (output (nth 1 next)) )
  2734.               (setq low (nth 2 next))
  2735.               (skk-erase-prefix)
  2736.               (if output
  2737.               (progn
  2738.                 (setq last-kana 
  2739.                   (if skk-katakana (car output) (cdr output)))
  2740.                 ;; XXX for isearch
  2741.                 (skk-insert-str last-kana)
  2742.                 (if skk-okurigana (skk-set-okurigana))))
  2743.               (if newprefix
  2744.               (progn
  2745.                 (skk-set-marker skk-kana-start-point (point))
  2746.                 (skk-insert-prefix newprefix)
  2747.                 (setq skk-prefix newprefix))
  2748.             (setq cont nil
  2749.                   skk-prefix "" )))
  2750.           (let ((type (skk-kana-input-char-type
  2751.                    (or r-char (skk-event-to-character raw-event)))))
  2752.             (cond ((eq type 5)    ; delete prefix
  2753.                (setq cont nil)
  2754.                (if skk-okurigana
  2755.                    (progn
  2756.                  (skk-delete-okuri-mark)
  2757.                  (skk-set-marker skk-kana-start-point
  2758.                          skk-okurigana-start-point )))
  2759.                (or (string= skk-prefix "")
  2760.                    (if skk-echo
  2761.                    (skk-erase-prefix)
  2762.                  (skk-message "$B%W%l%U%#%C%/%9(B \"%s\" $B$r>C$7$^$7$?(B"
  2763.                           "Deleted prefix \"%s\""
  2764.                           skk-prefix )))
  2765.                (setq skk-prefix "") )
  2766.               (t
  2767.                (if (string= skk-prefix "")
  2768.                    (progn
  2769.                  (skk-message
  2770.                   "$BE,@Z$J%m!<%^;z$+$JJQ49%k!<%k$,$"$j$^$;$s!#(B"
  2771.                    "No suitable rule." )
  2772.                  (skk-set-marker skk-kana-start-point nil)
  2773.                  (setq cont nil) )
  2774.                  (skk-erase-prefix)
  2775.                  (let ((output (skk-get-fallback-rule skk-prefix)))
  2776.                    (if output
  2777.                    (progn
  2778.                      (setq last-kana 
  2779.                        (if skk-katakana
  2780.                            (car output) (cdr output)))
  2781.                      ;; XXX for isearch
  2782.                      (skk-insert-str last-kana)
  2783.                      (if skk-okurigana (skk-set-okurigana)) ))
  2784.                    (skk-unread-event raw-event)
  2785.                    (skk-set-marker skk-kana-start-point nil)
  2786.                    (setq skk-prefix "")
  2787.                    (setq cont nil) ))
  2788.  
  2789.                )))
  2790.           )
  2791.         )))
  2792.         (quit
  2793.      (setq skk-prefix "")
  2794.      (skk-erase-prefix)
  2795.      (skk-set-marker skk-kana-start-point nil)
  2796.      (keyboard-quit) ))
  2797.       (let ((postfix-rules (skk-check-postfix-rule last-input)))
  2798.     (if postfix-rules
  2799.         (progn
  2800.           (let ((prefix last-kana))
  2801.         (if skk-isearch-message (skk-isearch-message)))
  2802.           (let* ((raw-event (skk-read-event))
  2803.              ;; ascii equivallence of raw-event or nil.
  2804.              (r-char (skk-event-to-character raw-event)) )
  2805.         (if r-char
  2806.             (let ((new-char
  2807.                (skk-get-postfix-rule
  2808.                 (concat last-input (skk-char-to-string r-char))
  2809.                 postfix-rules ))
  2810.               prefix )
  2811.               (if new-char
  2812.               (progn
  2813.                 (setq skk-prefix (skk-char-to-string r-char))
  2814.                 (skk-set-marker skk-kana-start-point (point))
  2815.                 (skk-insert-prefix skk-prefix)
  2816.               ;; XXX for isearch
  2817.                 (setq prefix (concat last-kana skk-prefix))
  2818.                 (if skk-isearch-message (skk-isearch-message))
  2819.                 (condition-case nil
  2820.                 (let* ((raw-event2 (skk-read-event))
  2821.                        (r-char2 (skk-event-to-character raw-event2))
  2822.                        (type (skk-kana-input-char-type r-char2)) 
  2823.                        (prefix (concat skk-prefix
  2824.                                (skk-char-to-string r-char2)))
  2825.                        (next (skk-get-next-rule prefix) ))
  2826.                   (cond  (next
  2827.                       ;; rule $B$,$"$k!#(B
  2828.                       (setq skk-prefix "")
  2829.                       (skk-erase-prefix)
  2830.                       (skk-set-marker skk-kana-start-point nil)
  2831.                       (skk-unread-event raw-event2)
  2832.                       (skk-unread-event raw-event) )
  2833.                      ((eq type 5)
  2834.                       ;; delete
  2835.                       (setq skk-prefix "")
  2836.                       (skk-erase-prefix)
  2837.                       (skk-set-marker skk-kana-start-point nil) )
  2838.                      (t
  2839.                       (skk-erase-prefix)
  2840.                       (skk-insert-str
  2841.                        (if skk-katakana
  2842.                            (car new-char)
  2843.                          (cdr new-char)))
  2844.                       (skk-unread-event raw-event2) )))
  2845.                   (quit
  2846.                    (setq skk-prefix "")
  2847.                    (skk-erase-prefix)
  2848.                    (skk-set-marker skk-kana-start-point nil)
  2849.                    (skk-unread-event raw-event)
  2850.                    (keyboard-quit) )))
  2851.             (skk-unread-event raw-event) ))
  2852.           (skk-unread-event raw-event) )))))
  2853.       )))
  2854.  
  2855. (defun skk-translate-okuri-char (okurigana)
  2856.   (if skk-okuri-char-alist
  2857.       (cdr (assoc (skk-substring-head-character okurigana) skk-okuri-char-alist)) ))
  2858.  
  2859. (defun skk-set-okurigana ()
  2860.   ;; $B8+=P$78l$+$i(B skk-henkan-okurigana, skk-henkan-key $B$N3FCM$r%;%C%H$9$k!#(B
  2861.   (if skk-katakana
  2862.       (skk-hiragana-region skk-henkan-start-point (point)) )
  2863.   (skk-set-marker skk-henkan-end-point skk-okurigana-start-point)
  2864.   ;; just in case
  2865.   (skk-save-point
  2866.     (goto-char skk-okurigana-start-point)
  2867.     (if (not (eq (following-char) ?*)) ;?*
  2868.         (insert "*") ))
  2869.   (setq skk-henkan-okurigana (skk-buffer-substring
  2870.                               (1+ skk-okurigana-start-point)
  2871.                               (point) ))
  2872.   (setq skk-henkan-key (concat (skk-buffer-substring skk-henkan-start-point
  2873.                                                      skk-henkan-end-point )
  2874.                    (or (skk-translate-okuri-char
  2875.                     skk-henkan-okurigana)
  2876.                    skk-okuri-char ))
  2877.         skk-prefix "" )
  2878.   (if skk-debug
  2879.       (message "%S %S %S" skk-henkan-okurigana skk-henkan-key skk-okuri-char) )
  2880.   (delete-region skk-okurigana-start-point (1+ skk-okurigana-start-point))
  2881.   (setq skk-henkan-count 0)
  2882.   (skk-henkan)
  2883.   (setq skk-okurigana nil)
  2884.   (cancel-undo-boundary) )
  2885.  
  2886. ;;;; other inputting functions
  2887.  
  2888. (defun skk-insert-period (count)
  2889.   "$B8+=P$7$NJd40$r9T$C$F$$$k:GCf$G$"$l$P!"<!$N8uJd$rI=<($9$k!#(B
  2890. $BJd40$ND>8e$G$J$1$l$P!"(B\".\" $B$rA^F~$9$k!#(B
  2891. SKK abbrev $B%b!<%I$G$O!"(Bskk-abbrev-period $B4X?t$r;HMQ$9$k$3$H!#(B"
  2892.   (interactive "*P")
  2893.   (if (and (eq last-command 'skk-completion) (not skk-henkan-active))
  2894.       (progn
  2895.         (setq this-command 'skk-completion)
  2896.         (skk-completion nil) )
  2897.     (skk-self-insert count)
  2898.     (setq skk-last-henkan-result nil)
  2899.     (skk-set-marker skk-last-henkan-point nil) ))
  2900.  
  2901. (defun skk-insert-comma (count)
  2902.   "$B8+=P$7$NJd40$r9T$C$F$$$k:GCf$G$"$l$P!"D>A0$N8uJd$rI=<($9$k!#(B
  2903. $BJd40$ND>8e$G$J$1$l$P!"(B\",\" $B$rA^F~$9$k!#(B
  2904. SKK abbrev $B%b!<%I$G$O!"(Bskk-abbrev-comma $B4X?t$r;HMQ$9$k$3$H!#(B"
  2905.   (interactive "*P")
  2906.   (if (and (eq last-command 'skk-completion) (not skk-henkan-active))
  2907.       (skk-previous-completion)
  2908.     (skk-self-insert count) ))
  2909.  
  2910. (defun skk-abbrev-period (arg)
  2911.   "SKK abbrev $B%b!<%I$G8+=P$7$NJd40$r9T$C$F$$$k:GCf$G$"$l$P!"<!$N8uJd$rI=<($9$k!#(B
  2912. $BJd40$ND>8e$G$J$1$l$P!"%*%j%8%J%k$N%-!<3d$jIU$1$N%3%^%s%I$r%(%_%e%l!<%H$9$k!#(B
  2913. SKK abbrev $B%b!<%I0J30$G$O!"(Bskk-insert-period $B4X?t$r;HMQ$9$k$3$H!#(B"
  2914.   (interactive "*P")
  2915.   (if (eq last-command 'skk-completion)
  2916.       (progn
  2917.         (setq this-command 'skk-completion)
  2918.         (skk-completion nil) )
  2919.     (skk-emulate-original-map arg) ))
  2920.  
  2921. (defun skk-abbrev-comma (arg)
  2922.   "SKK abbrev $B%b!<%I$G8+=P$7$NJd40$r9T$C$F$$$k:GCf$G$"$l$P!"D>A0$N8uJd$rI=<($9$k!#(B
  2923. $BJd40$ND>8e$G$J$1$l$P!"%*%j%8%J%k$N%-!<3d$jIU$1$N%3%^%s%I$r%(%_%e%l!<%H$9$k!#(B
  2924. SKK abbrev $B%b!<%I0J30$G$O!"(Bskk-insert-comma $B4X?t$r;HMQ$9$k$3$H!#(B"
  2925.   (interactive "*P")
  2926.   (if (eq last-command 'skk-completion)
  2927.       (skk-previous-completion)
  2928.     (skk-emulate-original-map arg) ))
  2929.  
  2930. (defun skk-self-insert (arg)
  2931.   "$B$R$i$,$J!"%+%?%+%J!"$b$7$/$O(B ascii $BJ8;z$r%+%l%s%H%P%C%U%!$KA^F~$9$k!#(B
  2932. $B$R$i$,$J%b!<%I$b$7$/$O%+%?%+%J%b!<%I$G$O!"(Bskk-input-vector $B$r%F!<%V%k$H$7$F!"(B
  2933. $B:G8e$KF~NO$5$l$?%-!<$KBP1~$9$kJ8;z$rA^F~$9$k!#(B
  2934. ascii $B%b!<%I$G$O!"%-!<F~NO$r$=$N$^$^A^F~$9$k!#(B
  2935. skk-auto-insert-paren $B$NCM$,(B non-nil $B$N>l9g$G!"(Bskk-auto-paren-string-alist $B$K(B
  2936. $BBP1~$9$kJ8;zNs$,$"$k$H$-$O!"$=$NBP1~$9$kJ8;zNs(B ($B$+$C$3N`(B) $B$r<+F0E*$KA^F~$9$k!#(B"
  2937.   (interactive "*P")
  2938.   (let ((str (aref skk-input-vector last-command-char)))
  2939.     ;; Overlay $B$r>C$9$?$a$K@h$K3NDj$9$k!#(B
  2940.     (if skk-henkan-active (skk-kakutei))
  2941.     (if (not str)
  2942.         (skk-emulate-original-map arg)
  2943.       (let* ((count (prefix-numeric-value arg))
  2944.              (count2 count)
  2945.              (pair-str
  2946.               (and skk-auto-insert-paren
  2947.                    (cdr (assoc str skk-auto-paren-string-alist)) ))
  2948.              (pair-str-inserted 0) )
  2949.         (while (> count 0)
  2950.           (skk-insert-str str)
  2951.           (setq count (1- count)) )
  2952.         (if (not pair-str)
  2953.             nil
  2954.           (while (> count2 0)
  2955.             (if (not (string= pair-str (char-to-string (following-char))))
  2956.                 (progn
  2957.                   (setq pair-str-inserted (1+ pair-str-inserted))
  2958.                   (skk-insert-str pair-str) ))
  2959.             (setq count2 (1- count2)) )
  2960.           (if (not (eq pair-str-inserted 0))
  2961.               (backward-char pair-str-inserted) ))))))
  2962.  
  2963. (defun skk-zenkaku-insert (arg)
  2964.   "$BA41QJ8;z$r%+%l%s%H%P%C%U%!$KA^F~$9$k!#(B
  2965. skk-zenkaku-vector $B$r%F!<%V%k$H$7$F!":G8e$KF~NO$5$l$?%-!<$KBP1~$9$kJ8;z$rA^F~(B
  2966. $B$9$k!#(B
  2967. skk-auto-insert-paren $B$NCM$,(B non-nil $B$N>l9g$G!"(Bskk-auto-paren-string-alist $B$K(B
  2968. $BBP1~$9$kJ8;zNs$,$"$k$H$-$O!"$=$NBP1~$9$kJ8;zNs(B ($B$+$C$3N`(B) $B$r<+F0E*$KA^F~$9$k!#(B"
  2969.   (interactive "*p")
  2970.   (let* ((str (aref skk-zenkaku-vector last-command-char))
  2971.          (arg2 arg)
  2972.          (pair-str
  2973.           (and skk-auto-insert-paren
  2974.                (cdr (assoc str skk-auto-paren-string-alist)) ))
  2975.          (pair-str-inserted 0) )
  2976.     (while (> arg 0)
  2977.       (skk-insert-str str)
  2978.       (setq arg (1- arg)) )
  2979.     (if (not pair-str)
  2980.         nil
  2981.       (while (> arg2 0)
  2982.         (if (not (string= pair-str (char-to-string (following-char))))
  2983.             (progn
  2984.               (setq pair-str-inserted (1+ pair-str-inserted))
  2985.               (skk-insert-str pair-str) ))
  2986.         (setq arg2 (1- arg2)) )
  2987.       (if (not (eq pair-str-inserted 0))
  2988.           (backward-char pair-str-inserted) ))))
  2989.  
  2990. ;;;; henkan routines
  2991. (defun skk-henkan ()
  2992.   ;; $B%+%J$r4A;zJQ49$9$k%a%$%s%k!<%A%s!#(B
  2993.   (let (mark new-word kakutei-henkan)
  2994.     (if (string= skk-henkan-key "")
  2995.         (skk-kakutei)
  2996.       (if (not (eobp))
  2997.           ;; we use mark to go back to the correct position after henkan
  2998.           (setq mark (skk-save-point (forward-char 1) (point-marker))) )
  2999.       (if (not skk-henkan-active)
  3000.           (progn
  3001.             (skk-change-marker)
  3002.             (setq skk-current-search-prog-list skk-search-prog-list) ))
  3003.       ;; skk-henkan-1 $B$NCf$+$i%3!<%k$5$l$k(B skk-henkan-show-candidate $B$+$i(B throw
  3004.       ;; $B$5$l$k!#$3$3$G%-%c%C%A$7$?>l9g$O!"(B?x $B$,%9%H%j!<%`$KLa$5$l$F$$$k$N$G!"(B
  3005.       ;; $B$3$N4X?t$r=P$F!"(Bskk-previous-candidates $B$X$f$/!#(B
  3006.       (catch 'unread
  3007.         (setq new-word (or (skk-henkan-1) (skk-henkan-in-minibuff))
  3008.               kakutei-henkan skk-kakutei-flag )
  3009.         (if new-word
  3010.             (skk-insert-new-word new-word) ))
  3011.       (if mark
  3012.           (progn
  3013.             (goto-char mark)
  3014.             ;; $B;2>H$5$l$F$$$J$$%^!<%+!<$O!"(BGarbage Collection $B$,%3!<%k$5$l$?$H(B
  3015.             ;; $B$-$K2s<}$5$l$k$,!"$=$l$^$G$N4V!"%F%-%9%H$N$I$3$+$r;X$7$F$$$k$H!"(B
  3016.             ;; $B%F%-%9%H$N%"%C%W%G!<%H$N:]$K$=$N%^!<%+!<CM$r99?7$9$kI,MW$,$"$k(B
  3017.             ;; $B$N$G!"$I$3$b;X$5$J$$$h$&$K$9$k!#(B
  3018.             (skk-set-marker mark nil)
  3019.         (backward-char 1) )
  3020.         (goto-char (point-max)) )
  3021.       (if kakutei-henkan
  3022.       ;; $B3NDj$7$F$bNI$$(B ($B3NDj<-=q$K8uJd$r8+$D$1$?>l9g!"<-(B
  3023.       ;; $B=qEPO?$r9T$C$?>l9g!"$"$k$$$O%_%K%P%C%U%!$+$i8uJd(B
  3024.       ;; $B$rA*Br$7$?>l9g(B) $B$N$J$i!"(BOverlay $B$K$h$kI=<(JQ99$;(B
  3025.       ;; $B$:$K$=$N$^$^3NDj!#(B
  3026.       (skk-kakutei (if (skk-numeric-p)
  3027.                (skk-get-simply-current-candidate 'noconv)
  3028.              new-word )))
  3029.       )))
  3030.  
  3031. (defun skk-henkan-1 ()
  3032.   ;; skk-henkan $B$N%5%V%k!<%A%s!#(B
  3033.   (let (new-word)
  3034.     (if (eq skk-henkan-count 0)
  3035.         (progn
  3036.           (if (and (eq last-command 'skk-undo-kakutei-henkan)
  3037.                    (eq (car (car skk-current-search-prog-list))
  3038.                        'skk-search-kakutei-jisyo-file ))
  3039.               ;; in this case, we should not search kakutei jisyo.
  3040.               (setq skk-current-search-prog-list
  3041.                     (cdr skk-current-search-prog-list) ))
  3042.           (setq skk-henkan-list (skk-search))
  3043.           (if (null skk-henkan-list)
  3044.               nil
  3045.             (setq new-word (skk-get-current-candidate))
  3046.             (if skk-kakutei-flag
  3047.                 ;; found the unique candidate in kakutei jisyo
  3048.                 (setq this-command 'skk-kakutei-henkan
  3049.                       skk-last-kakutei-henkan-key skk-henkan-key ))))
  3050.       ;; $BJQ492s?t$,(B 1 $B0J>e$N$H$-!#(B
  3051.       (setq new-word (skk-get-current-candidate))
  3052.       (if (not new-word)
  3053.           ;; $B?7$7$$8uJd$r8+$D$1$k$+!"(Bskk-current-search-prog-list $B$,6u$K$J(B
  3054.           ;; $B$k$^$G(B skk-search $B$rO"B3$7$F%3!<%k$9$k!#(B
  3055.           (while (and skk-current-search-prog-list (not new-word))
  3056.             (setq skk-henkan-list (skk-nunion skk-henkan-list (skk-search))
  3057.                   new-word (skk-get-current-candidate) )))
  3058.       (if (and new-word (> skk-henkan-count 3))
  3059.           ;; show candidates in minibuffer
  3060.           (setq new-word (skk-henkan-show-candidates) )))
  3061.     new-word ))
  3062.  
  3063. ;;;###skk-autoload
  3064. (defun skk-get-current-candidate ()
  3065.   (if (skk-numeric-p)
  3066.       (let (val)
  3067.         (skk-uniq-numerals)
  3068.         (setq val (skk-numeric-convert (skk-get-simply-current-candidate)))
  3069.         (if (not skk-recompute-numerals-key)
  3070.             val
  3071.           (skk-uniq-numerals)
  3072.           (skk-numeric-convert (skk-get-simply-current-candidate)) ))
  3073.     (skk-get-simply-current-candidate) ))
  3074.  
  3075. (defun skk-henkan-show-candidates ()
  3076.   ;; $B%_%K%P%C%U%!$GJQ49$7$?8uJd72$rI=<($9$k!#(B
  3077.   (skk-save-point
  3078.    (let* ((candidate-keys               ; $BI=<(MQ$N%-!<%j%9%H(B
  3079.            (mapcar (function (lambda (c) (char-to-string (upcase c))))
  3080.                    skk-henkan-show-candidates-keys ))
  3081.           key-num-alist                 ; $B8uJdA*BrMQ$NO"A[%j%9%H(B
  3082.           (key-num-alist1               ; key-num-alist $B$rAH$_N)$F$k$?$a$N:n6HMQO"A[%j%9%H!#(B
  3083.            (let ((count 6))
  3084.              (mapcar (function (lambda (key) (prog1 (cons key count)
  3085.                                                (setq count (1- count)) )))
  3086.                      ;; $B5U$5$^$K$7$F$*$$$F!"I=<($9$k8uJd$N?t$,>/$J$+$C$?$i@h(B
  3087.                      ;; $BF,$+$i4v$D$+:o$k!#(B
  3088.                      (reverse skk-henkan-show-candidates-keys) )))
  3089.           (loop 0)
  3090.           inhibit-quit
  3091.           henkan-list new-one str reverse n )
  3092.      ;; $BG0$N$?$a!#(Bskk-previous-candidate $B$r;2>H!#(B
  3093.      (if skk-use-face (skk-henkan-face-off))
  3094.      (delete-region skk-henkan-start-point skk-henkan-end-point)
  3095.      (while loop
  3096.        (if str
  3097.            (let (message-log-max)
  3098.              (message str) )
  3099.          (cond (reverse
  3100.                 (setq loop (1- loop)
  3101.                       henkan-list (nthcdr (+ 4 (* loop 7)) skk-henkan-list)
  3102.                       reverse nil ))
  3103.                (skk-exit-show-candidates
  3104.                 ;; $B8uJd$,?T$-$F$7$^$C$F!"(Bskk-henkan-show-candidates ->
  3105.                 ;; skk-henkan-in-minibuff -> skk-henkan
  3106.                 ;; -> skk-henkan-show-candidates $B$N=g$G!":F$S$3$N4X?t$,8F$P$l(B
  3107.                 ;; $B$?$H$-$O!"$3$3$G(B henkan-list $B$H(B loop $B$r7W;;$9$k!#(B
  3108.                 (setq henkan-list (nthcdr skk-henkan-count skk-henkan-list)
  3109.                       loop (car skk-exit-show-candidates)
  3110.                       skk-exit-show-candidates nil ))
  3111.                (t
  3112.                 ;; skk-henkan-show-candidates-keys $B$N:G=*$N%-!<$KBP1~$9$k8uJd(B
  3113.                 ;; $B$,=P$F$/$k$^$G%5!<%A$rB3$1$k!#(B
  3114.                 (if (skk-numeric-p) (skk-uniq-numerals))
  3115.                 (while (and skk-current-search-prog-list
  3116.                             (null (nthcdr (+ 11 (* loop 7)) skk-henkan-list)) )
  3117.                   (setq skk-henkan-list
  3118.                         (skk-nunion skk-henkan-list (skk-search)) )
  3119.                   (if (skk-numeric-p)
  3120.                       (skk-uniq-numerals) ))
  3121.                 (if (skk-numeric-p)
  3122.                     (skk-numeric-convert*7) )
  3123.                 (setq henkan-list (nthcdr (+ 4 (* loop 7))
  3124.                                           skk-henkan-list ))))
  3125.          (setq n (skk-henkan-show-candidate-subr candidate-keys henkan-list)) )
  3126.        (if (> n 0)
  3127.            (condition-case nil
  3128.                (let* ((event (skk-read-event))
  3129.                       (char (skk-event-to-character event))
  3130.                       num )
  3131.                  (if (null char)
  3132.                      (skk-unread-event event)
  3133.                    (setq key-num-alist (nthcdr (- 7 n) key-num-alist1))
  3134.                    (if (null key-num-alist)
  3135.                        nil
  3136.                      (setq num (cdr (or (assq char key-num-alist)
  3137.                                         (if (skk-lower-case-p char)
  3138.                                             (assq (upcase char) key-num-alist)
  3139.                                           (assq (downcase char) key-num-alist) )))))
  3140.                    (cond (num
  3141.                           (setq new-one (nth num henkan-list)
  3142.                                 skk-henkan-count (+ 4 (* loop 7) num)
  3143.                                 skk-kakutei-flag t
  3144.                                 loop nil
  3145.                                 str nil ))
  3146.                          ((eq char (skk-int-char 32)) ; space
  3147.                           (if (or skk-current-search-prog-list
  3148.                                   (nthcdr 7 henkan-list) )
  3149.                               (setq loop (1+ loop)
  3150.                                     str nil )
  3151.                             ;; $B8uJd$,?T$-$?!#$3$N4X?t$+$iH4$1$k!#(B
  3152.                             (let ((last-showed-index (+ 4 (* loop 7))))
  3153.                               (setq skk-exit-show-candidates
  3154.                                     ;; cdr $BIt$O!"<-=qEPO?$KF~$kA0$K:G8e$KI=<($7(B
  3155.                                     ;; $B$?8uJd72$NCf$G:G=i$N8uJd$r;X$9%$%s%G%/%9(B
  3156.                                     (cons loop last-showed-index) )
  3157.                               ;; $B<-=qEPO?$KF~$k!#(Bskk-henkan-count $B$O(B
  3158.                               ;; skk-henkan-list $B$N:G8e$N8uJd$N<!(B ($BB8:_$7$J$$(B
  3159.                               ;; --- nil )$B$r;X$9!#(B
  3160.                               (setq skk-henkan-count (+ last-showed-index n)
  3161.                                     loop nil
  3162.                                     str nil ))))
  3163.                          ((eq char skk-previous-candidate-char)  ; ?x
  3164.                           (if (eq loop 0)
  3165.                               ;; skk-henkan-show-candidates $B$r8F$VA0$N>uBV$KLa(B
  3166.                               ;; $B$9!#(B
  3167.                               (progn
  3168.                                 (setq skk-henkan-count 4)
  3169.                                 (skk-unread-event (skk-character-to-event
  3170.                            skk-previous-candidate-char))
  3171.                                 ;; skk-henkan $B$^$G0l5$$K(B throw $B$9$k!#(B
  3172.                                 (throw 'unread nil) )
  3173.                             ;; $B0l$DA0$N8uJd72$r%(%3!<%(%j%"$KI=<($9$k!#(B
  3174.                             (setq reverse t
  3175.                                   str nil )))
  3176.                          (t (skk-message "\"%c\" $B$OM-8z$J%-!<$G$O$"$j$^$;$s!*(B"
  3177.                                          "\"%c\" is not valid here!"
  3178.                                          char )
  3179.                             (sit-for 1) ))))
  3180.              (quit
  3181.               ;; skk-previous-candidate $B$X(B
  3182.               (setq skk-henkan-count 0)
  3183.               (skk-unread-event (skk-character-to-event
  3184.                  skk-previous-candidate-char))
  3185.               ;; skk-henkan $B$^$G0l5$$K(B throw $B$9$k!#(B
  3186.               (throw 'unread nil) ))))  ; end of while loop
  3187.      (if (consp new-one)
  3188.          (cdr new-one)
  3189.        new-one ))))
  3190.  
  3191. (defun skk-henkan-show-candidate-subr (keys candidates)
  3192.   ;; key $B$H(B candidates $B$rAH$_9g$o$;$F(B 7 $B$D0J2<$N8uJd72(B ($B8uJd?t$,B-$j$J$+$C$?$i(B
  3193.   ;; $B$=$3$GBG$A@Z$k(B) $B$NJ8;zNs$r:n$j!"%_%K%P%C%U%!$KI=<($9$k!#(B
  3194.   (let ((n 0) str cand
  3195.         message-log-max )
  3196.     (if (not (car candidates))
  3197.         nil
  3198.       (setq n 1
  3199.             ;; $B:G=i$N8uJd$NA0$K6uGr$r$/$C$D$1$J$$$h$&$K:G=i$N8uJd$@$1@h$K<h$j(B
  3200.             ;; $B=P$9!#(B
  3201.             str (concat (car keys) ":" (skk-%-to-%%
  3202.                                         (if (consp (car candidates))
  3203.                                             (cdr (car candidates))
  3204.                                           (car candidates) ))))
  3205.       ;; $B;D$j$N(B 6 $B$D$r<h$j=P$9!#8uJd$H8uJd$N4V$r6uGr$G$D$J$0!#(B
  3206.       (while (and (< n 7) (setq cand (nth n candidates)))
  3207.         (setq cand (skk-%-to-%% (if (consp cand) (cdr cand) cand))
  3208.               str (concat str "  " (nth n keys) ":" cand)
  3209.               n (1+ n) ))
  3210.       (message "%s  [$B;D$j(B %d%s]"
  3211.                str (length (nthcdr n candidates))
  3212.                (make-string (length skk-current-search-prog-list) ?+) ))
  3213.     ;; $BI=<($9$k8uJd?t$rJV$9!#(B
  3214.     n ))
  3215.  
  3216. (defun skk-%-to-%% (str)
  3217.   ;; STR $BCf$K(B % $B$r4^$`J8;z$,$"$C$?$i!"(B%% $B$K$7$F(B message $B$G%(%i!<$K$J$i$J$$$h$&(B
  3218.   ;; $B$K$9$k!#(B
  3219.   (let ((tail str)
  3220.         temp beg end )
  3221.     (save-match-data
  3222.       (while (string-match "%+" tail)
  3223.         (setq beg (match-beginning 0)
  3224.               end (match-end 0)
  3225.               temp (concat temp (substring tail 0 beg)
  3226.                            (make-string (* 2 (- end beg)) ?%) )
  3227.               tail (substring tail end) ))
  3228.       (concat temp tail) )))
  3229.  
  3230. (defun skk-henkan-in-minibuff ()
  3231.   ;; $B%_%K%P%C%U%!$G<-=qEPO?$r$7!"EPO?$7$?%(%s%H%j$NJ8;zNs$rJV$9!#(B
  3232.   (save-match-data
  3233.     (let ((enable-recursive-minibuffers t)
  3234.           ;; $BJQ49Cf$K(B isearch message $B$,=P$J$$$h$&$K$9$k!#(B
  3235.           skk-isearch-message new-one )
  3236.       (add-hook 'minibuffer-setup-hook 'skk-setup-minibuffer)
  3237.       (condition-case nil
  3238.           (setq new-one
  3239.                 (read-from-minibuffer
  3240.                  (concat (or (if (skk-numeric-p)
  3241.                                  (skk-numeric-midasi-word) )
  3242.                              (if skk-okuri-char
  3243.                                  (skk-compute-henkan-key2)
  3244.                                skk-henkan-key ))
  3245.                          " " )))
  3246.         (quit
  3247.          (setq new-one "") ))
  3248.       (if (string= new-one "")
  3249.           (if skk-exit-show-candidates
  3250.               ;; $B%_%K%P%C%U%!$KI=<($7$?8uJd$,?T$-$F<-=qEPO?$KF~$C$?$,!"6uJ8;z(B
  3251.               ;; $BNs$,EPO?$5$l$?>l9g!#:G8e$K%_%K%P%C%U%!$KI=<($7$?8uJd72$r:FI=(B
  3252.               ;; $B<($9$k!#(B
  3253.               (progn
  3254.                 (setq skk-henkan-count (cdr skk-exit-show-candidates))
  3255.                 (skk-henkan) )
  3256.             ;; skk-henkan-show-candidates $B$KF~$kA0$K8uJd$,?T$-$?>l9g(B
  3257.             (setq skk-henkan-count (1- skk-henkan-count))
  3258.             (if (eq skk-henkan-count -1)
  3259.                 (progn
  3260.                   ;; $BAw$j$"$j$NJQ49$G<-=qEPO?$KF~$j!"6uJ8;z$rEPO?$7$?8e!"$=$N(B
  3261.                   ;; $B$^$^:FEYAw$j$J$7$H$7$FJQ49$7$?>l9g$O(B 
  3262.                   ;; skk-henkan-okurigana, skk-okuri-char $B$NCM$r(B nil $B$K$7$J$1(B
  3263.                   ;; $B$l$P!"$=$l$>$l$NCM$K8E$$Aw$j2>L>$,F~$C$?$^$^$G8!:w$K<:GT(B
  3264.                   ;; $B$9$k!#(B
  3265.                   (setq skk-henkan-okurigana nil
  3266.                         skk-okurigana nil
  3267.                         skk-okuri-char nil )
  3268.                   (skk-change-marker-to-white) )
  3269.               ;; skk-henkan-count $B$,(B -1 $B$G$J$1$l$P!"%+%l%s%H%P%C%U%!$G$O:G8e$N(B
  3270.               ;; $B8uJd$rI=<($7$?$^$^$J$N$G(B ($BI=<(4XO"$G$O2?$b$7$J$/$F$b!"$b$&4{(B
  3271.               ;; $B$KK>$_$N>uBV$K$J$C$F$$$k(B) $B2?$b$7$J$$!#(B
  3272.               ))
  3273.         ;; $B%_%K%P%C%U%!$GJQ49$7$?J8;zNs$,$"$k(B ($B6uJ8;zNs$G$J$$(B) $B$H$-!#(B
  3274.         ;; $BKvHx$N6uGr$r<h$j=|$/!#(B
  3275.         (if (string-match "[ $B!!(B]+$" new-one)
  3276.             (setq new-one (substring new-one 0 (match-beginning 0))) )
  3277.         (if (skk-numeric-p)
  3278.             (setq new-one (skk-adjust-numeric-henkan-data new-one))
  3279.           ;; $B$9$4$/$?$/$5$s$N8uJd$,$"$k>l9g$K!"$=$N:G8e$K?7$7$$8uJd$r2C$($k$N$O(B
  3280.           ;; $B$1$C$3$&9|$@$,!#(B
  3281.           (setq skk-henkan-list (nconc skk-henkan-list (list new-one))
  3282.                 ;; $B%U%i%0$r%*%s$K$9$k!#(B
  3283.                 skk-kakutei-flag t ))
  3284.         (setq skk-henkan-in-minibuff-flag t
  3285.               skk-touroku-count (1+ skk-touroku-count) ))
  3286.       ;; (nth skk-henkan-count skk-henkan-list) $B$,(B nil $B$@$+$i<-=qEPO?$K(B
  3287.       ;; $BF~$C$F$$$k!#(Bskk-henkan-count $B$r%$%s%/%j%a%s%H$9$kI,MW$O$J$$!#(B
  3288.       ;; (setq skk-henkan-count (1+ skk-henkan-count))
  3289.       ;; new-one $B$,6uJ8;zNs$@$C$?$i(B nil $B$rJV$9!#(B
  3290.       (if (not (string= new-one "")) new-one) )))
  3291.  
  3292. (defun skk-compute-henkan-key2 ()
  3293.   ;; skk-henkan-okurigana $B$,(B non-nil $B$J$i(B skk-henkan-key $B$+$i!"$+$D$F(B 
  3294.   ;; skk-henkan-key2 $B$H8F$P$l$F$$$?$b$N$r:n$k!#(B
  3295.   ;; skk-henkan-key2 $B$H$O!"!V4A;zItJ,$NFI$_(B + "*" + $BAw$j2>L>!W$N7A<0$NJ8;zNs$r(B
  3296.   ;; $B8@$&!#(B
  3297.   (if skk-henkan-okurigana
  3298.       (save-match-data
  3299.         (if (string-match "[a-z]+$" skk-henkan-key)
  3300.             (concat (substring skk-henkan-key 0 (match-beginning 0))
  3301.                     "*" skk-henkan-okurigana )))))
  3302.               
  3303. (defun skk-setup-minibuffer ()
  3304.   ;; $B%+%l%s%H%P%C%U%!$NF~NO%b!<%I$K=>$$%_%K%P%C%U%!$NF~NO%b!<%I$r@_Dj$9$k!#(B
  3305.   (let ((mode (skk-spy-origin-buffer-mode)))
  3306.     (if (not mode)
  3307.         nil
  3308.       (cond ((eq mode 'hirakana) (skk-j-mode-on))
  3309.             ((eq mode 'katakana) (skk-j-mode-on t))
  3310.             ((eq mode 'abbrev) (skk-abbrev-mode-on))
  3311.             ((eq mode 'ascii) (skk-ascii-mode-on))
  3312.             ((eq mode 'zenkaku) (skk-zenkaku-mode-on))))))
  3313.  
  3314. (defun skk-spy-origin-buffer-mode ()
  3315.   ;; $B%_%K%P%C%U%!$K5o$k$H$-$K%*%j%8%J%k$N%+%l%s%H%P%C%U%!$NF~NO%b!<%I$rDe;!$9$k!#(B
  3316.   (with-current-buffer (skk-minibuffer-origin)
  3317.     (if skk-mode
  3318.         (cond (skk-abbrev-mode 'abbrev)
  3319.               (skk-ascii-mode 'ascii)
  3320.               (skk-zenkaku-mode 'zenkaku)
  3321.               (skk-katakana 'katakana)
  3322.               (t 'hirakana) ))))
  3323.  
  3324. ;;;###skk-autoload
  3325. (defun skk-previous-candidate ()
  3326.   "$B"'%b!<%I$G$"$l$P!"0l$DA0$N8uJd$rI=<($9$k!#(B
  3327. $B"'%b!<%I0J30$G$O%+%l%s%H%P%C%U%!$K(B \"x\" $B$rA^F~$9$k!#(B
  3328. $B3NDj<-=q$K$h$k3NDj$ND>8e$K8F$V$H3NDj$,%"%s%I%%$5$l$F!"3NDjA0$N>uBV$G(B
  3329. skk-last-kakutei-henkan-key $B$,%+%l%s%H%P%C%U%!$KA^F~$5$l$k!#(B"
  3330.   (interactive)
  3331.   (if (not skk-henkan-active)
  3332.       (if (not (eq last-command 'skk-kakutei-henkan))
  3333.           (skk-kana-input)
  3334.         ;; restore the state just before the last kakutei henkan.
  3335.         (delete-region skk-henkan-start-point (point))
  3336.         (skk-set-henkan-point-subr)
  3337.         (insert skk-last-kakutei-henkan-key)
  3338.         (setq this-command 'skk-undo-kakutei-henkan) )
  3339.     (if (string= skk-henkan-key "")
  3340.         nil
  3341.       ;; $B6uGr$rA^F~$7$F$*$$$F!"8e$G(B delete-backward-char $B$r;H$C$F>C$9J}K!$G$O!"(B
  3342.       ;; overwrite-mode $B$N$H$-$K$=$N6uGr$r>C$;$J$$!#=>$$(B skk-henkan $B$G9T$J$C$F(B
  3343.       ;; $B$$$kJ}K!$HF1$8$b$N$r;H$&!#(B
  3344.       ;;(insert " ")
  3345.       (let ((mark
  3346.              (if (not (eobp))
  3347.                  (skk-save-point (forward-char 1) (point-marker)) )))
  3348.         (skk-save-point
  3349.           (if (eq skk-henkan-count 0)
  3350.               (progn
  3351.                 (if skk-okuri-char
  3352.                     ;; roman prefix for okurigana should be removed.
  3353.                     (setq skk-henkan-key (substring skk-henkan-key 0 -1)) )
  3354.                 (setq skk-henkan-count -1
  3355.                       skk-henkan-list nil
  3356.                       skk-henkan-okurigana nil
  3357.                       skk-okuri-char nil
  3358.                       skk-okurigana nil
  3359.                       skk-prefix "" )
  3360.                 (if skk-auto-okuri-process
  3361.                     (skk-init-auto-okuri-variables) )
  3362.                 (if (skk-numeric-p)
  3363.                     (skk-init-numeric-conversion-variables) )
  3364.                 ;; Emacs 19.28 $B$@$H2?8N$+(B Overlay $B$r>C$7$F$*$+$J$$$H!"<!$K(B
  3365.                 ;; insert $B$5$l$k(B skk-henkan-key Overlay $B$,$+$+$C$F$7$^$&!#(B
  3366.                 (if skk-use-face (skk-henkan-face-off))
  3367.                 (delete-region skk-henkan-start-point skk-henkan-end-point)
  3368.                 (goto-char skk-henkan-end-point)
  3369.                 (insert skk-henkan-key)
  3370.                 (skk-change-marker-to-white) )
  3371.             (setq skk-henkan-count (1- skk-henkan-count))
  3372.             (skk-insert-new-word (skk-get-simply-current-candidate)) ))
  3373.         ;;(if (and (> (point) 1) (eq (char-after (1- (point))) 32))
  3374.         ;; delete-backward-char $B$G$O!"(Boverwrite-mode $B$N$H$-$KD>A0$N6uGr$r>C$;(B
  3375.         ;; $B$J$$!#(B
  3376.         ;;    (delete-backward-char 1) )
  3377.         (if mark
  3378.             (progn
  3379.               (goto-char mark)
  3380.               (skk-set-marker mark nil)
  3381.               (backward-char 1) )
  3382.           (goto-char (point-max)) )
  3383.         (if (and skk-abbrev-mode (eq skk-henkan-count -1))
  3384.             (skk-abbrev-mode-on) )))))
  3385.  
  3386. (defun skk-insert-new-word (word)
  3387.   ;; $B8+=P$78l$r>C$7!"$=$N>l=j$XJQ497k2L$NJ8;zNs$rA^F~$9$k!#(B
  3388.   (let (func)
  3389.     ;; $BG0$N$?$a!#2?8N$3$l$rF~$l$k$N$+$K$D$$$F$O!"(Bskk-previous-candidate $B$r;2>H(B
  3390.     (if skk-use-face (skk-henkan-face-off))
  3391.     (delete-region skk-henkan-start-point skk-henkan-end-point)
  3392.     (goto-char skk-henkan-start-point)
  3393.     ;; (^_^;) $B$N$h$&$J8+=P$78l$KBP$7!"(Bread-from-string $B$r8F$V$H%(%i!<$K$J$k$N(B
  3394.     ;; $B$G!"(Bcondition-case $B$G$=$N%(%i!<$rJa$^$($k!#(B
  3395.     (condition-case nil
  3396.         (setq func (car (read-from-string word)))
  3397.       (error (setq func word)))
  3398.     ;; symbolp $B$G(B nil $B$rJV$9$h$&$JC18l$r!"(Bsymbolp $B$G%A%'%C%/$9$k$3$HL5$/$$$-(B
  3399.     ;; $B$J$j(B fboundp $B$G%A%'%C%/$9$k$H!"%(%i!<$K$J$k!#(B
  3400.     ;; e.x. "(#0)"
  3401.     (condition-case nil
  3402.         (if (and (listp func) (symbolp (car func)) (fboundp (car func)))
  3403.             (insert (eval func))
  3404.           (insert word) )
  3405.       ;; $BJ8;zNs$rJV$5$J$$(B Lisp $B%W%m%0%i%`$rI>2A$7$F$b%(%i!<$K$J$i$J$$J}$,JXMx!)(B
  3406.       (error nil) )
  3407.     (skk-set-marker skk-henkan-end-point (point))
  3408.     (if skk-use-face (skk-henkan-face-on))
  3409.     (if skk-insert-new-word-function
  3410.         (funcall skk-insert-new-word-function) )))
  3411.  
  3412. ;;;###skk-autoload
  3413. (defun skk-kakutei (&optional word)
  3414.   "$B8=:_I=<($5$l$F$$$k8l$G3NDj$7!"<-=q$N99?7$r9T$&!#(B
  3415. $B%*%W%7%g%J%k0z?t$N(B WORD $B$rEO$9$H!"8=:_I=<($5$l$F$$$k8uJd$H$OL54X78$K(B WORD $B$G3N(B
  3416. $BDj$9$k!#(B"
  3417.   ;; read only $B$G%(%i!<$K$J$k$h$&$K$9$k$H(B read only $B%P%C%U%!$G(B SKK $B$,5/F0$G$-(B
  3418.   ;; $B$J$/$J$k!#(B
  3419.   (interactive)
  3420.   (let ((inhibit-quit t)
  3421.         converted kakutei-word )
  3422.     (if skk-mode
  3423.         (skk-j-mode-on skk-katakana)
  3424.       ;; $B%+%l%s%H%P%C%U%!$G$^$@(B skk-mode $B$,%3!<%k$5$l$F$$$J$+$C$?$i!"%3!<%k$9(B
  3425.       ;; $B$k!#(B
  3426.       (skk-mode 1) )
  3427.     (if (not skk-henkan-on)
  3428.         nil
  3429.       (if (not skk-henkan-active)
  3430.           nil
  3431.         (setq kakutei-word
  3432.               ;; $B3NDj<-=q$N8l$G3NDj$7$?$H$-$O!"<-=q$K$=$N8l$r=q$-9~$`I,MW$b$J(B
  3433.               ;; $B$$$7!"99?7$9$kI,MW$b$J$$$H;W$C$F$$$?$,!"Jd40$r9T$J$&$H$-$O!"(B
  3434.               ;; $B8D?M<-=q$r;2>H$9$k(B ($B3NDj<-=q$O;2>H$7$J$$(B) $B$N$G!"B?>/;q8;$H;~(B
  3435.               ;; $B4V$rL5BL$K$7$F$b!"8D?M<-=q$K3NDj<-=q$N%(%s%H%j$r=q$-9~$s$G99(B
  3436.               ;; $B?7$b$7$F$*$/!#(B
  3437.               (or word (skk-get-simply-current-candidate (skk-numeric-p))) )
  3438.         (if (or
  3439.              (and (not skk-search-excluding-word-pattern-function) kakutei-word)
  3440.              (and
  3441.               kakutei-word
  3442.               skk-search-excluding-word-pattern-function
  3443.               (not
  3444.                (funcall skk-search-excluding-word-pattern-function kakutei-word) )))
  3445.             (progn
  3446.             (skk-update-jisyo kakutei-word)
  3447.         ;; keep this order
  3448.         (setq skk-last-henkan-result kakutei-word)
  3449.         (skk-set-marker skk-last-henkan-point (point))
  3450.             (if (skk-numeric-p)
  3451.                 (progn
  3452.                   (setq converted (skk-get-simply-current-candidate))
  3453.                   (skk-update-jisyo-for-numerals kakutei-word converted) )))))
  3454.       (skk-kakutei-cleanup-henkan-buffer) )
  3455.     (skk-kakutei-save-and-init-variables
  3456.      (if (skk-numeric-p)
  3457.          (cons kakutei-word converted)
  3458.        kakutei-word ))
  3459.     (skk-do-auto-fill)
  3460.     (skk-set-cursor-color (if skk-katakana
  3461.                               skk-katakana-cursor-color
  3462.                             skk-hirakana-cursor-color ))))
  3463.  
  3464. (defun skk-kakutei-cleanup-henkan-buffer ()
  3465.   ;; $B3NDjD>8e$N%P%C%U%!$N@07A$r9T$J$&!#(B
  3466.   ;; $B$3$N4X?t$O!"(Bskk-vip.el $B$G>e=q$-$5$l$k!#(B
  3467.   (if skk-okurigana
  3468.       (progn
  3469.         (skk-delete-okuri-mark)
  3470.         (if (and skk-katakana skk-convert-okurigana-into-katakana)
  3471.             (skk-katakana-region skk-henkan-end-point (point)) )))
  3472.   (skk-delete-henkan-markers)
  3473.   (if (and (boundp 'self-insert-after-hook) self-insert-after-hook)
  3474.       (funcall self-insert-after-hook skk-henkan-start-point (point)) )
  3475.   (if overwrite-mode
  3476.       (skk-del-char-with-pad
  3477.        (skk-ovwrt-len
  3478.         (string-width
  3479.          (skk-buffer-substring skk-henkan-start-point (point)) )))))
  3480.  
  3481. (defun skk-kakutei-save-and-init-variables (&optional kakutei-word)
  3482.   ;; $B3NDj;~$KJQ?t$N=i4|2=$H%"%s%I%%$N$?$a$NJQ?t$NJ]B8$r9T$J$&!#(B
  3483.   (if (and kakutei-word (or (consp kakutei-word)
  3484.                             (not (string= kakutei-word "")) ))
  3485.       (progn
  3486.         ;; skk-undo-kakutei $B$N$?$a$K:G8e$NJQ49$N%G!<%?!<$rJ]B8$9$k!#(B
  3487.         (setq skk-last-henkan-key skk-henkan-key
  3488.               ;; $B3NDj$7$?8l$r@hF,$K$7$F(B skk-henkan-list $B$NCM$rJ]B8$9$k!#(B
  3489.               skk-last-henkan-list (cons kakutei-word
  3490.                                          (delete kakutei-word skk-henkan-list) )
  3491.               skk-last-henkan-okurigana skk-henkan-okurigana
  3492.               skk-last-okuri-char skk-okuri-char
  3493.               skk-kakutei-count (1+ skk-kakutei-count) )
  3494.         ;;(if (boundp 'disable-undo)
  3495.         ;;    (setq disable-undo nil)
  3496.         ))
  3497.   (setq skk-abbrev-mode nil
  3498.         skk-exit-show-candidates nil
  3499.         skk-henkan-active nil
  3500.         skk-henkan-count -1
  3501.         skk-henkan-key nil
  3502.         skk-henkan-list nil
  3503.         skk-henkan-okurigana nil
  3504.         skk-henkan-on nil
  3505.         skk-kakutei-flag nil
  3506.         skk-okuri-char nil
  3507.         skk-prefix "" )
  3508.   (if skk-auto-okuri-process
  3509.       (skk-init-auto-okuri-variables) )
  3510.   (if (skk-numeric-p)
  3511.       (skk-init-numeric-conversion-variables) ))
  3512.  
  3513. (defun skk-undo-kakutei ()
  3514.   "$B0lHV:G8e$N3NDj$r%"%s%I%%$7!"8+=P$7$KBP$9$k8uJd$rI=<($9$k!#(B
  3515. $B:G8e$K3NDj$7$?$H$-$N8uJd$O%9%-%C%W$5$l$k!#(B
  3516. $B8uJd$,B>$K$J$$$H$-$O!"%_%K%P%C%U%!$G$N<-=qEPO?$KF~$k!#(B"
  3517.   (interactive)
  3518.   (cond ((eq last-command 'skk-undo-kakutei)
  3519.          (skk-error "$B3NDj%"%s%I%%$OO"B3;HMQ$G$-$^$;$s(B"
  3520.                     "Cannot undo kakutei repeatedly" ))
  3521.         (skk-henkan-active
  3522.          (skk-error "$B"'%b!<%I$G$O3NDj%"%s%I%%$G$-$^$;$s(B"
  3523.                     "Cannot undo kakutei in $B"'(B mode" ))
  3524.         ((or (not skk-last-henkan-key) (string= skk-last-henkan-key ""))
  3525.          ;; skk-last-henkan-key may be nil or "".
  3526.          (skk-error "$B%"%s%I%%%G!<%?!<$,$"$j$^$;$s(B" "Lost undo data") ))
  3527.   (condition-case nil
  3528.       (let ((end (if skk-last-henkan-okurigana
  3529.                      (+ (length skk-last-henkan-okurigana)
  3530.                         skk-henkan-end-point )
  3531.                    skk-henkan-end-point )))
  3532.         (setq skk-henkan-active t
  3533.               skk-henkan-key skk-last-henkan-key
  3534.               skk-henkan-list skk-last-henkan-list
  3535.               skk-henkan-on t
  3536.               skk-henkan-okurigana skk-last-henkan-okurigana
  3537.               skk-okuri-char skk-last-okuri-char
  3538.               skk-current-search-prog-list
  3539.               (if (eq (car (car skk-search-prog-list))
  3540.                       'skk-search-kakutei-jisyo-file )
  3541.                   ;; $B3NDj<-=q$OC5$7$F$bL50UL#!#(B
  3542.                   (cdr skk-search-prog-list)
  3543.                 skk-search-prog-list ))
  3544.         (if (>= (point-max) end)
  3545.             ;; $B:G8e$NJQ49ItJ,$N%F%-%9%H$r>C$9!#Aw$j2>L>$rGD0.$7$F$$$k$N$J$i(B 
  3546.             ;; (skk-process-okuri-early $B$,(B non-nil $B$J$iAw$j2>L>$rGD0.$G$-$J$$(B)$B!"(B
  3547.             ;; $BAw$j2>L>$r4^$a$?ItJ,$^$G$r>C$9!#(B
  3548.             (delete-region skk-henkan-start-point end) )
  3549.         (goto-char skk-henkan-start-point)
  3550.         (cancel-undo-boundary)
  3551.         (insert "$B"'(B")
  3552.         (undo-boundary)
  3553.         (skk-set-marker skk-henkan-start-point (point))
  3554.         (if skk-okuri-char
  3555.             ;; $BAw$j$"$j(B
  3556.             (progn
  3557.               (insert (substring skk-henkan-key 0
  3558.                                  (1- (length skk-henkan-key)) ))
  3559.               (skk-set-marker skk-henkan-end-point (point))
  3560.               (if skk-henkan-okurigana (insert skk-henkan-okurigana)) )
  3561.           (insert skk-henkan-key)
  3562.           (skk-set-marker skk-henkan-end-point (point)) )
  3563.         ;; $B$5$!!"=`Hw$,@0$$$^$7$?!*(B
  3564.         (skk-message "$B3NDj%"%s%I%%!*(B" "Undo kakutei!")
  3565.         (setq skk-henkan-count 1)
  3566.         (skk-henkan) )
  3567.     ;; skk-kakutei-undo $B$+$iESCf$GH4$1$?>l9g$O!"3F<o%U%i%0$r=i4|2=$7$F$*$+$J$$(B
  3568.     ;; $B$H<!$NF0:n$r$7$h$&$H$7$?$H$-$K%(%i!<$K$J$k!#(B
  3569.     (error (skk-kakutei))
  3570.     (quit (skk-kakutei)) ))
  3571.      
  3572. (defun skk-downcase (char)
  3573.   (let ((d (cdr (assq char skk-downcase-alist))))
  3574.     (if d
  3575.     d
  3576.       (downcase char) )))
  3577.  
  3578. (defun skk-set-henkan-point (&optional arg)
  3579.   "$BJQ49$r3+;O$9$k%]%$%s%H$r%^!<%/$7!"BP1~$9$k(B skk-prefix $B$+!"Jl2;$rF~NO$9$k!#(B"
  3580.   (interactive "*P")
  3581.   (combine-after-change-calls
  3582.     (let* ((last-char (skk-downcase last-command-char))
  3583.        (normal (not (eq last-char last-command-char)))
  3584.            (sokuon (and (string= skk-prefix (char-to-string last-char))
  3585.                         (/= last-char ?o)))
  3586.            (henkan-active skk-henkan-active))
  3587.       (cancel-undo-boundary)
  3588.       (if (or (not skk-henkan-on) skk-henkan-active)
  3589.           (if normal
  3590.               (skk-set-henkan-point-subr)
  3591.             (if skk-henkan-on
  3592.                 (skk-set-henkan-point-subr) )
  3593.             (if henkan-active
  3594.                 (skk-emulate-original-map arg)
  3595.               (skk-self-insert arg) ))
  3596.         (if (not normal)
  3597.             ;; process special char
  3598.             (progn
  3599.               (insert last-char)
  3600.               (skk-set-marker skk-henkan-end-point (point))
  3601.               (setq skk-henkan-count 0
  3602.                     skk-henkan-key (skk-buffer-substring
  3603.                                     skk-henkan-start-point (point) )
  3604.                     skk-prefix "" )
  3605.               (skk-henkan) )
  3606.           ;; prepare for the processing of okurigana if not skk-okurigana
  3607.           ;; and the preceding character is not a numeric character.
  3608.           ;; if the previous char is a special midashi char or a
  3609.           ;; numeric character, we assume that the user intended to type the
  3610.           ;; last-command-char in lower case.
  3611.           (if (and (not skk-okurigana)
  3612.                    (or (= skk-henkan-start-point (point))
  3613.                        (let ((p (char-after (1- (point)))))
  3614.                          (not
  3615.                           (or
  3616.                            ;; previous char is a special midashi char
  3617.                            (memq p skk-special-midashi-char-list)
  3618.                            ;; previous char is an ascii numeric char
  3619.                            (and (<= 48 p) ; ?0
  3620.                                 (<= p 57) ) ; ?9
  3621.                            ;; previous char is a jis numeric char
  3622.                            (and (eq (char-after (- (point) 2)) 163)
  3623.                                 (<= 176 p) (<= p 185) ))))))
  3624.               (if skk-process-okuri-early
  3625.                   (progn
  3626.                     (skk-set-marker skk-henkan-end-point (point))
  3627.                     (setq skk-okuri-char (char-to-string last-char))
  3628.                     (if sokuon
  3629.                         (progn
  3630.                           (setq skk-henkan-key
  3631.                                 (concat (skk-buffer-substring
  3632.                                          skk-henkan-start-point
  3633.                                          skk-kana-start-point )
  3634.                                         (if skk-katakana "$B%C(B" "$B$C(B")
  3635.                                         skk-henkan-okurigana ))
  3636.                           (skk-erase-prefix)
  3637.                           (insert (if skk-katakana "$B%C(B " "$B$C(B "))
  3638.                           (setq skk-prefix ""
  3639.                                 skk-henkan-count 0 )
  3640.                           (skk-henkan)
  3641.                           ;;(if skk-use-face (skk-henkan-face-off))
  3642.                           (delete-backward-char 2)
  3643.                           ;;(if skk-use-face (skk-henkan-face-on))
  3644.                           )
  3645.                       (setq skk-henkan-key (concat
  3646.                                             (skk-buffer-substring
  3647.                                              skk-henkan-start-point
  3648.                                              (point) )
  3649.                         skk-okuri-char ))
  3650.                       (insert " ")
  3651.                       (setq skk-prefix ""
  3652.                             skk-henkan-count 0 )
  3653.                       (skk-henkan)
  3654.                       ;;(if skk-use-face (skk-henkan-face-off))
  3655.                       (delete-backward-char 1)
  3656.                       ;;(if skk-use-face (skk-henkan-face-on))
  3657.                       )
  3658.                     ;; we set skk-kana-start-point here, since the marker may no
  3659.                     ;; longer point at the correct position after skk-henkan.
  3660.                     (skk-set-marker skk-kana-start-point (point)) )
  3661.                 (if (= skk-henkan-start-point (point))
  3662.                     nil
  3663.                   (if sokuon
  3664.                       (progn
  3665.                         (skk-erase-prefix)
  3666.                         (insert (if skk-katakana "$B%C(B" "$B$C(B"))
  3667.                         (setq skk-prefix "") ))
  3668.                   (skk-set-marker skk-okurigana-start-point (point))
  3669.                   (insert "*")
  3670.                   (skk-set-marker skk-kana-start-point (point))
  3671.                   (setq skk-okuri-char (char-to-string last-char)
  3672.                         skk-okurigana t ))))))
  3673.       (if normal
  3674.           (skk-unread-event
  3675.            (skk-character-to-event last-char)) ))))
  3676.  
  3677. ;;;###skk-autoload
  3678. (defun skk-start-henkan (arg)
  3679.   "$B"&%b!<%I$G$OJQ49$r3+;O$9$k!#"'%b!<%I$G$O<!$N8uJd$rI=<($9$k!#(B
  3680.   $B$=$NB>$N%b!<%I$G$O!"%*%j%8%J%k$N%-!<3d$jIU$1$N%3%^%s%I$r%(%_%e%l!<%H$9$k!#(B"
  3681.   (interactive "*p")
  3682.   (combine-after-change-calls
  3683.     (save-match-data
  3684.       (if (not skk-henkan-on)
  3685.           (skk-self-insert arg)
  3686.         (if skk-henkan-active
  3687.             (progn (setq skk-henkan-count (1+ skk-henkan-count))
  3688.                    (skk-henkan) )
  3689.           (let ((pos (point)))
  3690.             (or (string= skk-prefix "")
  3691.                 (skk-error "$B%U%#%C%/%9$5$l$F$$$J$$(B skk-prefix $B$,$"$j$^$9(B"
  3692.                            "Have unfixed skk-prefix" ))
  3693.             (if (< pos skk-henkan-start-point)
  3694.                 (skk-error
  3695.                  "$B%+!<%=%k$,JQ493+;OCOE@$h$jA0$K$"$j$^$9(B"
  3696.                  "Henkan end point must be after henkan start point" ))
  3697.             ;; $B8+=P$78l$,%+%?%+%J$G$"$l$P$R$i$,$J$KJQ49$9$k!#$b$78+=P$78l$NJQ49(B
  3698.             ;; $B$;$:$K$=$N$^$^(B skk-henkan $B$KEO$7$?$1$l$P!"(BC-u SPC (arg $B$,(B 4 $B$K$J(B
  3699.             ;; $B$k(B) $B$H%?%$%W$9$l$P$h$$!#(B
  3700.             (if (and skk-katakana (eq arg 1))
  3701.                 (skk-hiragana-region skk-henkan-start-point pos) )
  3702.             (setq skk-henkan-key (skk-buffer-substring
  3703.                                   skk-henkan-start-point pos ))
  3704.             (if skk-allow-spaces-newlines-and-tabs
  3705.                 ;; skk-henkan-key $B$NCf$N(B "[ \n\t]+" $B$r40A4$K<h$j=|$/!#(B
  3706.                 (while (string-match "[ \n\t]+" skk-henkan-key)
  3707.                   (setq skk-henkan-key
  3708.                         (concat (substring skk-henkan-key 0 (match-beginning 0))
  3709.                                 (substring skk-henkan-key (match-end 0)) )))
  3710.               (skk-save-point
  3711.                (beginning-of-line)
  3712.                (if (> (point) skk-henkan-start-point)
  3713.                    (skk-error
  3714.                     "$BJQ49%-!<$K2~9T$,4^$^$l$F$$$^$9(B"
  3715.                     "Henkan key may not contain a new line character" )))
  3716.               ;; $B:G=i$N%9%Z!<%9$G(B skk-henkan-key $B$r$A$g$s@Z$k$@$1!#(B
  3717.               (setq skk-henkan-key (substring skk-henkan-key 0
  3718.                                               (string-match " "
  3719.                                                             skk-henkan-key ))))
  3720.             (skk-set-marker skk-henkan-end-point pos)
  3721.             (setq skk-henkan-count 0)
  3722.             (skk-henkan)
  3723.             (if (and skk-abbrev-mode skk-henkan-active)
  3724.         (progn
  3725.           (skk-j-mode-on)
  3726.           (setq skk-abbrev-mode t) )))) ;; XXX
  3727.         (cancel-undo-boundary) ))))
  3728.  
  3729. (defun skk-backward-and-set-henkan-point (arg)
  3730.   "$B%]%$%s%H$ND>A0$K$"$kJ8;zNs$N@hF,$KJQ493+;O%]%$%s%H$r<($9(B \"$B"&(B\" $B$rIU$1$k!#(B
  3731. $B%+!<%=%k$ND>A0$K$"$kJ8;z(B \($B%9%Z!<%9J8;z!"%?%VJ8;z!"D92;$rI=$o$9!V!<!W(B $B$OL5>r7o(B
  3732. $B$K%9%-%C%W$5$l$k(B\) $B$r(B skk-what-char-type $B$K$FH=JL$7!"F1<o$NJ8;zNs$r$R$H$+$?$^(B
  3733. $B$j$H$7$F8eJ}$X%9%-%C%W$9$k!#(B
  3734. $BC"$7!"$R$i$+$J$N>l9g$O!V$r!W$ND>A0$G!"%+%?%+%J$N>l9g$O!V%r!W$ND>A0$G;_$^$k!#(B
  3735. C-u ARG $B$G(B ARG $B$rM?$($k$H!"$=$NJ8;zJ,$@$1La$C$FF1$8F0:n$r9T$J$&!#(B"
  3736.   (interactive "*P")
  3737.   (if (not skk-mode)
  3738.       (skk-emulate-original-map arg)
  3739.     (catch 'exit1
  3740.       (skk-save-point
  3741.         ;; $B$H$j$"$($::G=i$N(B SPC, TAB, $BA43Q(B SPC $B$@$1%8%c%s%W$9$k!#(B
  3742.         (skip-chars-backward " \t$B!!(B")
  3743.         ;; $B0z?t$"$j!#(B
  3744.         (if arg
  3745.             (if (not skk-allow-spaces-newlines-and-tabs)
  3746.                 (skk-backward-char (prefix-numeric-value arg))
  3747.               (setq arg (prefix-numeric-value arg))
  3748.               (while (> arg 0)
  3749.                 (skip-chars-backward " \t$B!!(B")
  3750.                 (if (bolp)
  3751.                     ;; $B9TF,$@$C$?$i0l9TA0$N9TKv$^$GLa$k$,!"(Barg $B$O8:$i$5$J$$!#(B
  3752.                     (skk-backward-char 1)
  3753.                   (skk-backward-char 1)
  3754.                   (setq arg (1- arg)) )))
  3755.           ;; $B0z?t$J$7!#(B
  3756.           (let ((limit
  3757.                  (if (not skk-allow-spaces-newlines-and-tabs)
  3758.                      (skk-save-point (beginning-of-line) (point))
  3759.                    (point-min) ))
  3760.                 ;; $B!2!1!0!/!.!-!,!+!*!)!(!'!&!%!$!#(B
  3761.                 (unknown-chars-regexp
  3762.                  (if skk-allow-spaces-newlines-and-tabs
  3763.                      "[ $B!!(B\n\t$B!<!7!6!5!4!3(B]"
  3764.                    "[$B!!!<!7!6!5!4!3(B]" ))
  3765.                 char p )
  3766.             (save-match-data
  3767.               (skk-save-point
  3768.                 (skk-backward-char 1)
  3769.                 (while (and (> (point) limit)
  3770.                             ;; unknown-chars-regexp $B$G$OJ8;z<oJL$,H=JL$G$-$J$$$N(B
  3771.                             ;; $B$G!"$=$NJ8;zNs$,B3$/8B$j%]%$%s%H$r%P%C%U%!$N@hF,(B
  3772.                             ;; $BJ}8~$XLa$9!#(B
  3773.                             (looking-at unknown-chars-regexp) )
  3774.                   (skk-backward-char 1) )
  3775.                 (setq char (skk-what-char-type))
  3776.                 (if (eq char 'unknown)
  3777.                     (throw 'exit1 nil)
  3778.                   (skk-backward-and-set-henkan-point-1 char)
  3779.                   (setq p (point))
  3780.                   (if skk-allow-spaces-newlines-and-tabs
  3781.                       (while (and (> (point) limit) (bolp))
  3782.                         ;; 1 $B9T>e$N9TKv$X!#(B
  3783.                         (skk-backward-char 1)
  3784.                         ;; $B%]%$%s%H$,H=JL$G$-$J$$J8;z<oJL$N>e$K$"$k4V$O(B 
  3785.                         ;; backward $BJ}8~$X%]%$%s%H$rLa$9!#(B
  3786.                         ;;(while (and (> (point) limit)
  3787.                         ;;            (looking-at unknown-chars-regexp) )
  3788.                         ;;  (skk-backward-char 1) )
  3789.                         (if ;;(or
  3790.                             (> 0 (skk-backward-and-set-henkan-point-1 char))
  3791.                             ;;(eq (skk-what-char-type) char))
  3792.                             (setq p (point)) ))))))
  3793.             (goto-char p)
  3794.             (skip-chars-forward unknown-chars-regexp) ))
  3795.         (skk-set-henkan-point-subr) ))))
  3796.  
  3797. (defun skk-backward-and-set-henkan-point-1 (char)
  3798.   ;; skk-backward-and-set-henkan-point $B$N%5%V%k!<%A%s!#(BCHAR $B$N<oN`$K1~$8$?J8;z(B
  3799.   ;; $B$r%9%-%C%W$7$F%P%C%U%!$N@hF,J}8~$XLa$k!#(B
  3800.   (cond ((eq char 'hirakana)
  3801.          ;; "$B$r(B" $B$NA0$G;_$^$C$?J}$,JXMx!)(B
  3802.          (skip-chars-backward "$B!3!4!5!6!7!<$s$!(B-$B$q(B") )
  3803.         ((eq char 'katakana)
  3804.          ;; "$B%r(B" $B$NA0$G;_$^$C$?J}$,JXMx!)(B
  3805.          (skip-chars-backward "$B!3!4!5!6!7!<%s%!(B-$B%q(B") )
  3806.         ((eq char 'zenkaku)
  3807.          (skip-chars-backward "$B!!(B-$B#z(B") )
  3808.         ((eq char 'ascii)
  3809.          (skip-chars-backward " -~") )))
  3810.  
  3811. (defun skk-what-char-type ()
  3812.   ;; $B8=:_$N%]%$%s%H$K$"$kJ8;z$,$I$s$J<oN`$+$rH=JL$9$k!#(B
  3813.   (save-match-data
  3814.     (cond ((looking-at "[$B$!(B-$B$s(B]") 'hirakana)
  3815.           ((looking-at "[$B%!(B-$B%s(B]") 'katakana)
  3816.           ;; "$B!<(B" $B$r=|30$7$F$$$k(B ("$B!<(B" $B$O(B "$B!;(B" $B$H(B "$B!=(B" $B$N4V$KF~$C$F$$$k(B)$B!#(B
  3817.           ((looking-at "[$B!!(B-$B!;!=(B-$B#z(B]") 'zenkaku)
  3818.           ((looking-at "[ -~]") 'ascii)
  3819.           (t 'unknown) )))
  3820.  
  3821. (defun skk-set-henkan-point-subr ()
  3822.   "$B$+$J$rF~NO$7$?8e$G!"%]%$%s%H$KJQ493+;O$N%^!<%/(B \($B"&(B\) $B$rIU$1$k!#(B
  3823. $B85!9$O$3$N4X?t$O(B skk-set-henkan-point $B$NFbIt4X?t$G$"$k!#(B"
  3824.   (interactive "*")
  3825.   (if skk-henkan-on (skk-kakutei))
  3826.   ;;(if (boundp 'disable-undo)
  3827.   ;;    (setq disable-undo t)
  3828.   (cancel-undo-boundary)
  3829.   ;;  )
  3830.   (if (string= skk-prefix "")
  3831.       (insert "$B"&(B")
  3832.     (skk-erase-prefix)
  3833.     (insert "$B"&(B")
  3834.     (skk-set-marker skk-kana-start-point (point))
  3835.     (skk-insert-prefix) )
  3836.   ;;(or (boundp 'disable-undo)
  3837.   (undo-boundary)
  3838.   ;;    )
  3839.   (setq skk-henkan-on t)
  3840.   (skk-set-marker skk-henkan-start-point (point)) )
  3841.  
  3842. (defun skk-change-marker ()
  3843.   ;; "$B"&(B"$B$r(B"$B"'(B"$B$KJQ$($k!#(Bskk-henkan-active $B%U%i%0$r(B t $B$K$9$k!#(B
  3844.   (combine-after-change-calls
  3845.     (skk-save-point
  3846.      (goto-char (- skk-henkan-start-point skk-kanji-len))
  3847.      (if (looking-at "$B"&(B")
  3848.          (progn
  3849.            (cancel-undo-boundary)
  3850.            (let ((buffer-undo-list t))
  3851.              (insert "$B"'(B")
  3852.              (delete-char 1)
  3853.              (setq skk-henkan-active t) )
  3854.            (undo-boundary)
  3855.            )
  3856.        (skk-kakutei)
  3857.        (skk-error "$B"&$,$"$j$^$;$s(B" "It seems that you have deleted $B"&(B") ))))
  3858.  
  3859. (defun skk-change-marker-to-white ()
  3860.   ;; "$B"'(B"$B$r(B"$B"&(B"$B$KJQ$($k!#(Bskk-henkan-active $B%U%i%0$r(B nil $B$K$9$k!#(B
  3861.   (combine-after-change-calls
  3862.     (skk-save-point
  3863.      (goto-char (- skk-henkan-start-point skk-kanji-len))
  3864.      (cancel-undo-boundary)
  3865.      (if (looking-at "$B"'(B")
  3866.          (let ((buffer-undo-list t))
  3867.            (insert "$B"&(B")
  3868.            (delete-char 1) )
  3869.        (goto-char skk-henkan-start-point)
  3870.        (insert "$B"&(B")
  3871.        ;;(or (boundp 'disable-undo)
  3872.        ;;(undo-boundary)
  3873.        ;;    )
  3874.        (skk-set-marker skk-henkan-start-point (point))
  3875.        (skk-message "$B"'$,$"$j$^$;$s(B" "It seems that you have deleted $B"'(B") )
  3876.      (setq skk-henkan-active nil) )))
  3877.  
  3878. (defun skk-delete-henkan-markers (&optional nomesg)
  3879.   ;; $BJQ49;~$K%+%l%s%H%P%C%U%!$KI=$o$l$k(B `$B"&(B', `$B"'(B' $B%^!<%/$r>C$9!#(B
  3880.   (if (not (marker-position skk-henkan-start-point))
  3881.       nil
  3882.     (combine-after-change-calls
  3883.       (save-match-data
  3884.         (skk-save-point
  3885.          (goto-char (- skk-henkan-start-point skk-kanji-len))
  3886.          (if skk-henkan-active
  3887.              (progn
  3888.                (if skk-use-face (skk-henkan-face-off))
  3889.                (if (looking-at "$B"'(B")
  3890.                    (delete-char 1)
  3891.                  (or nomesg
  3892.                      (skk-message "$B"'$,$"$j$^$;$s(B"
  3893.                                   "It seems that you have deleted $B"'(B" ))))
  3894.            (if (looking-at "$B"&(B")
  3895.                (delete-char 1)
  3896.              (or nomesg
  3897.                  (skk-message "$B"&$,$"$j$^$;$s(B"
  3898.                               "It seems that you have deleted $B"&(B" )))))))))
  3899.  
  3900. (defun skk-delete-okuri-mark ()
  3901.   ;; $BAw$j2>L>F~NOCf$K%+%l%s%H%P%C%U%!$KI=$o$l$k(B `*' $B%^!<%/$r>C$7!"Aw$j2>L>4XO"(B
  3902.   ;; $B%U%i%0$r(B nil $B$K%;%C%H$9$k!#(B
  3903.   (if (not (marker-position skk-okurigana-start-point))
  3904.       nil
  3905.     (skk-save-point
  3906.       (if (eq (char-after skk-okurigana-start-point) ?*) ; ?*
  3907.           (delete-region skk-okurigana-start-point
  3908.                          (1+ skk-okurigana-start-point) ))
  3909.       (setq skk-okurigana nil
  3910.             skk-okuri-char nil
  3911.             skk-henkan-okurigana nil ))))
  3912.             
  3913. ;;;; jisyo related functions
  3914. (defun skk-purge-from-jisyo ()
  3915.   "$B"'%b!<%I$G8=:_$N8uJd$r<-=q%P%C%U%!$+$i>C5n$9$k!#(B"
  3916.   (interactive "*")
  3917.   (if (and skk-henkan-active (not (string= skk-henkan-key "")))
  3918.       (if (not
  3919.            (yes-or-no-p (format
  3920.                          (if skk-japanese-message-and-error
  3921.                              "%s /%s/%s$B$r<-=q$+$i:o=|$7$^$9!#NI$$$G$9$+!)(B"
  3922.                            "Really purge \"%s /%s/%s\"?" )
  3923.                          skk-henkan-key (skk-get-simply-current-candidate)
  3924.                          (if (and skk-henkan-okurigana
  3925.                                   (or skk-henkan-okuri-strictly
  3926.                       skk-henkan-strict-okuri-precedence ))
  3927.                              (concat
  3928.                               (if skk-japanese-message-and-error
  3929.                                   " ($BAw$j2>L>(B: "
  3930.                                 "(okurigana: " )
  3931.                               skk-henkan-okurigana
  3932.                               ") " )
  3933.                            " " ))))
  3934.           nil
  3935.         ;; skk-henkan-start-point $B$+$i(B point $B$^$G:o=|$7$F$7$^$C$F$b!"JQ49D>8e(B
  3936.         ;; $B$K(B ($B%+!<%=%k$rF0$+$9$3$H$J$/(B) skk-purge-from-jisyo $B$r8F$Y$PLdBj$J$$(B
  3937.         ;; $B$,!"%+!<%=%k$,0c$&>l=j$X0\F0$7$F$$$?>l9g$O!":o=|$9$Y$-$G$J$$$b$N$^(B
  3938.         ;; $B$G:o=|$7$F$7$^$&2DG=@-$,$"$k!#$=$3$G!"Aw$j2>L>$,$"$l$P$=$ND9$5$r4^(B
  3939.         ;; $B$a$?(B end $B$r5a$a!":#2s$NJQ49$K4XO"$7$?8D=j$@$1$r@53N$K@Z$j<h$k$h$&$K(B
  3940.         ;; $B$9$k!#(B
  3941.         (let ((end (if skk-henkan-okurigana
  3942.                        (+ (length skk-henkan-okurigana)
  3943.                           skk-henkan-end-point )
  3944.                      skk-henkan-end-point ))
  3945.               (word (skk-get-simply-current-candidate (skk-numeric-p))) )
  3946.           ;;(if skk-use-numeric-conversion
  3947.           ;;    (skk-update-jisyo-for-numerals purge-word 'purge) )
  3948.           (skk-update-jisyo word 'purge)
  3949.           ;; $BG0$N$?$a!#(Bskk-previous-candidate $B$r;2>H!#(B 
  3950.           (if skk-use-face (skk-henkan-face-off))
  3951.           (delete-region skk-henkan-start-point end)
  3952.           (skk-change-marker-to-white)
  3953.           (skk-kakutei)
  3954.       (if skk-use-relation
  3955.           (skk-update-relation
  3956.                (if skk-use-numeric-conversion
  3957.                    (skk-compute-numeric-henkan-key skk-henkan-key)
  3958.          skk-henkan-key )
  3959.                (or skk-henkan-okurigana skk-okuri-char)
  3960.            word nil 'purge))
  3961.           ;;(if (boundp 'skk-attr-alist)
  3962.           ;;    (skk-attr-purge
  3963.           ;;     (if skk-use-numeric-conversion
  3964.           ;;         (skk-compute-numeric-henkan-key skk-henkan-key)
  3965.           ;;       skk-henkan-key )
  3966.           ;;     (or skk-henkan-okurigana skk-okuri-char)
  3967.           ;;     word ))
  3968.       ))))
  3969.  
  3970. ;;;###skk-autoload
  3971. (defun skk-save-jisyo (&optional quiet)
  3972.   "SKK $B$N<-=q%P%C%U%!$r%;!<%V$9$k!#(B
  3973. $B%*%W%7%g%J%k0z?t$N(B QUIET $B$,(B non-nil $B$G$"$l$P!"<-=q%;!<%V;~$N%a%C%;!<%8$r=P$5$J(B
  3974. $B$$!#(B"
  3975.   (interactive "P")
  3976.   (let* ((skk-jisyo (expand-file-name skk-jisyo))
  3977.          (jisyo-buffer (skk-get-jisyo-buffer skk-jisyo 'nomsg)) )
  3978.     (if (or (not jisyo-buffer) (not (buffer-modified-p jisyo-buffer)))
  3979.         (if (not quiet) 
  3980.             (progn
  3981.               (skk-message "SKK $B<-=q$rJ]B8$9$kI,MW$O$"$j$^$;$s(B"
  3982.                            "No need to save SKK jisyo" )
  3983.               (sit-for 1) ))
  3984.       (with-current-buffer jisyo-buffer
  3985.         (let ((inhibit-quit t)
  3986.               (tempo-file (skk-make-temp-jisyo)) )
  3987.           (if (not quiet)
  3988.               (skk-message "SKK $B<-=q$rJ]B8$7$F$$$^$9(B..."
  3989.                            "Saving SKK jisyo..." ))
  3990.           (skk-save-jisyo-1 tempo-file)
  3991.           (skk-check-jisyo-size tempo-file)
  3992.           ;; $B<-=q$N%;!<%V$K@.8y$7$F=i$a$F(B modified $B%U%i%C%0$r(B nil $B$K$9$k!#(B
  3993.           (set-buffer-modified-p nil)
  3994.           (if (not quiet)
  3995.               (progn
  3996.                 (skk-message "SKK $B<-=q$rJ]B8$7$F$$$^$9(B...$B40N;!*(B"
  3997.                              "Saving SKK jisyo...done" )
  3998.                 (sit-for 1) ))
  3999.           (if (eq this-command 'save-buffers-kill-emacs)
  4000.               (skk-record-jisyo-data jisyo-buffer) )))
  4001.       (skk-set-cursor-properly) )))
  4002.  
  4003. (defun skk-save-jisyo-1 (file)
  4004.   (save-match-data
  4005.     (let (mc-flag enable-multibyte-characters buffer-read-only)
  4006.       (goto-char (point-min))
  4007.       (if (re-search-forward "^;; okuri-ari entries.$" nil 'noerror)
  4008.           nil
  4009.         (skk-error
  4010.          "$BAw$j$"$j%(%s%H%j$N%X%C%@!<$,$"$j$^$;$s!*(B SKK $B<-=q$N%;!<%V$rCf;_$7$^$9(B"
  4011.          "Header line for okuri-ari entries is missing!  Stop saving SKK jisyo" ))
  4012.       ;; $B$*$C!"%3%a%s%H%U%'%$%9$,(B $" $B$G=*$o$i$J$$$>(B > hilit19.el
  4013.       (if (re-search-forward "^;; okuri-nasi entries.$" nil 'noerror)
  4014.           nil
  4015.         (skk-error
  4016.          "$BAw$j$J$7%(%s%H%j$N%X%C%@!<$,$"$j$^$;$s(B $B!*(B SKK $B<-=q$N%;!<%V$rCf;_$7$^$9(B"
  4017.          "Header line for okuri-nasi entries is missing!  Stop saving SKK jisyo" )))
  4018.     (write-region 1 (point-max) file nil 'nomsg) ))
  4019.  
  4020. (defun skk-check-jisyo-size (new-file)
  4021.   (let ((new-size (nth 7 (file-attributes new-file)))
  4022.         old-size )
  4023.     (if (eq new-size 0)
  4024.         (progn
  4025.           (delete-file new-file)
  4026.           (skk-error "SKK $B<-=q$,6u$K$J$C$F$$$^$9!*(B $B<-=q$N%;!<%V$rCf;_$7$^$9(B"
  4027.                      "Null SKK jisyo!  Stop saving jisyo" )))
  4028.     (if (or (not skk-compare-jisyo-size-when-saving)
  4029.             ;; $B5l<-=q$H$N%5%$%:Hf3S$r9T$J$o$J$$!#(B
  4030.             (progn
  4031.               ;; (1)skk-jisyo $B$,$J$$$+!"(B
  4032.               ;; (2)new-file $B$H(B skk-jisyo $B$,F10l$N%5%$%:$+(B
  4033.               ;;    (skk-(aux-)large-jisyo $B$+$i?75,$NC18l$rFI$_9~$^$J$+$C$?$j!"(B
  4034.               ;;    $B?75,C18l$NEPO?$r9T$J$o$J$+$C$?>l9g$O%5%$%:$,F1$8(B)$B!"(B
  4035.               ;; (3)new-file $B$NJ}$,Bg$-$$(B
  4036.               ;; $B>l9g(B ($B>e5-$N(B 3 $BDL$j$G$"$l$P$$$:$l$b@5>o(B)$B!#(B
  4037.               (setq old-size (nth 7 (file-attributes skk-jisyo)))
  4038.               (or (not old-size)
  4039.                   (>= new-size old-size) )))
  4040.         (skk-make-new-jisyo new-file)
  4041.       ;; yes-or-no-p $B$K2sEz$7!"(Bnewline $B$9$k$H!"(Bthis-command $B$,JQ$C$F$7$^$&!#(B
  4042.       (let (this-command this-command-char last-command last-command-char)
  4043.         (if (skk-yes-or-no-p
  4044.              (format
  4045.               "skk-jisyo $B$,(B %dbytes $B>.$5$/$J$j$^$9$,!"%;!<%V$7$FNI$$$G$9$+!)(B"
  4046.               (- old-size new-size) )
  4047.              (format
  4048.               "New %s will be %dbytes smaller.  Save anyway?"
  4049.               skk-jisyo (- old-size new-size) ))
  4050.             ;; $B$H$K$+$/%;!<%V!#(B
  4051.             (skk-make-new-jisyo new-file)
  4052.           ;; $B%;!<%V$H$j;_$a!#(B
  4053.           (delete-file new-file)
  4054.           (with-output-to-temp-buffer "*SKK warning*"
  4055.             (if skk-japanese-message-and-error
  4056.                 (progn
  4057.                   (princ "$B%;!<%V$7$h$&$H$9$k<-=q$N%5%$%:$,85$N$b$N$h$j$b>.$5$J$C$F$7$^$&$N$G!"(B")
  4058.                   (terpri)
  4059.                   (princ "$B%;!<%V$rESCf$GCf;_$7$^$7$?!#<-=q$N%5%$%:$,>.$5$/$J$C$?860x$K$ONc$((B")
  4060.                   (terpri)
  4061.                   (princ "$B$P!"(B")
  4062.                   (terpri)
  4063.                   (terpri)
  4064.                   (princ "    $B!&(BM-x skk-purge-from-jisyo $B$r<B9T$7$?!#(B")
  4065.                   (terpri)
  4066.                   (terpri)
  4067.                   (princ "    $B!&(B.skk-jisyo $B$N4A;z%3!<%I$H!"(B\" *.skk-jisyo*\" $B%P%C%U%!$N4A;z%3!<%I(B")
  4068.                   (terpri)
  4069.                   (princ "      $B$,0[$J$C$F$$$k!#(B")
  4070.                   (terpri)
  4071.                   (terpri)
  4072.                   (princ "    $B!&(B\" *.skk-jisyo*\" $B%P%C%U%!$r<+J,$GJT=8$7$?!#(B")
  4073.                   (terpri)
  4074.                   (terpri)
  4075.                   (princ "$B$J$I$,9M$($i$l$^$9(B ($B:G=i$N(B 2 $B$D$,860x$G$"$l$P!"0[>o$G$O$"$j$^$;$s!#(B")
  4076.                   (terpri)
  4077.                   (princ "$B:G8e$N>l9g$O!"$"$J$?$,$I$N$h$&$JJT=8$r$7$?$+$K$h$j$^$9(B)$B!#860x$r3NG'(B")
  4078.                   (terpri)
  4079.                   (princ "$B8e!"?5=E$K<-=q$N%;!<%V$r9T$J$&$3$H$r$*4+$a$7$^$9!#(B")
  4080.                   (terpri)
  4081.                   (terpri)
  4082.                   (princ "$B85$N<-=q$r:FEYFI$_9~$`$K$O!"(B")
  4083.                   (terpri)
  4084.                   (terpri)
  4085.                   (princ "    M-x skk-reread-private-jisyo")
  4086.                   (terpri)
  4087.                   (terpri)
  4088.                   (princ "$B$r<B9T$7$F2<$5$$!#(B") )
  4089.               (princ "As size of your private JISYO to be saved is smaller than the")
  4090.               (terpri)
  4091.               (princ "original, we have stopped saving JISYO.  For example, the following")
  4092.               (terpri)
  4093.               (princ "condition makes a smaller private JISYO;")
  4094.               (terpri)
  4095.               (terpri)
  4096.               (princ "    (a)You executed M-x skk-purge-from-jisyo,")
  4097.               (terpri)
  4098.               (terpri)
  4099.               (princ "    (b)Kanji code of .skk-jisyo is different from the one of")
  4100.               (terpri)
  4101.               (princ "       \" *.skk-jisyo*\" buffer, or")
  4102.               (terpri)
  4103.               (terpri)
  4104.               (princ "    (c)You edited \" *.skk-jisyo*\" buffer manually.")
  4105.               (terpri)
  4106.               (terpri)
  4107.               (princ "The first two condition is not strange, but the last one depends on")
  4108.               (terpri)
  4109.               (princ "how you edited JISYO.  We strongly recommend to save JISYO")
  4110.               (terpri)
  4111.               (princ "carefully after checking what causes this.")
  4112.               (terpri)
  4113.               (princ "If you want to reread your original private JISYO, type")
  4114.               (terpri)
  4115.               (terpri)
  4116.               (princ "    M-x skk-reread-private-jisyo")
  4117.               (terpri) ))
  4118.           (skk-error "SKK $B<-=q$N%;!<%V$rCf;_$7$^$7$?!*(B"
  4119.                      "Stop saving SKK jisyo!" ))))))
  4120.  
  4121. (defun skk-make-temp-jisyo ()
  4122.   ;; SKK $B8D?M<-=qJ]B8$N$?$a$N:n6HMQ$N%U%!%$%k$r:n$j!"%U%!%$%k$N%b!<%I$r(B
  4123.   ;; skk-jisyo $B$N$b$N$HF1$8$K@_Dj$9$k!#:n$C$?:n6HMQ%U%!%$%k$NL>A0$rJV$9!#(B
  4124.   (let ((tempo-name (skk-make-temp-file "skkdic")))
  4125.     (skk-create-file tempo-name)
  4126.     (set-file-modes tempo-name  (file-modes skk-jisyo))
  4127.     tempo-name ))
  4128.  
  4129. (defun skk-make-temp-file (prefix)
  4130.   ;; from call-process-region of mule.el.  Welcome!
  4131.   (make-temp-name
  4132.    (if (null (memq system-type '(ms-dos windows-nt)))
  4133.        (concat "/tmp/" prefix)
  4134.      (let ((tem (or (getenv "TMP") (getenv "TEMP") "/")))
  4135.        (concat tem
  4136.                (if (memq (aref tem (1- (length tem))) '(47 92)) ;?/, ?\\
  4137.                    "" "/" )
  4138.                prefix )))))
  4139.  
  4140. (defun skk-make-new-jisyo (tempo-file)
  4141.   ;; TEMPO-FILE $B$r?75,$N(B skk-jisyo $B$K$9$k!#(Bskk-backup-jisyo $B$,(B non-nil $B$@$C$?(B
  4142.   ;; $B$i%P%C%/%"%C%W<-=q$r:n$k!#(B
  4143.   (if skk-backup-jisyo
  4144.       (progn
  4145.         (if (file-exists-p skk-backup-jisyo)
  4146.             (delete-file skk-backup-jisyo) )
  4147.         (rename-file skk-jisyo skk-backup-jisyo) )
  4148.     (delete-file skk-jisyo) )
  4149.   (rename-file tempo-file skk-jisyo 'ok-if-already-exists) )
  4150.  
  4151. (defun skk-reread-private-jisyo ()
  4152.   "$B%P%C%U%!$KFI$_9~$s$@8D?M<-=q$rGK4~$7!"%U%!%$%k$+$i%P%C%U%!$X:FFI$_9~$_$9$k!#(B"
  4153.   (interactive)
  4154.   (let ((buf (skk-get-jisyo-buffer skk-jisyo 'nomsg)))
  4155.     (if (and buf
  4156.              (skk-yes-or-no-p "$BJT=8Cf$N8D?M<-=q$rGK4~$7$^$9$+!)(B"
  4157.                               "Discard your editing private JISYO?" ))
  4158.         (progn
  4159.           (save-excursion
  4160.             (set-buffer buf)
  4161.             (set-buffer-modified-p nil)
  4162.             (kill-buffer buf) )
  4163.           (or
  4164.            (skk-get-jisyo-buffer skk-jisyo 'nomsg)
  4165.            (skk-error "$B8D?M<-=q$r:FFI$_9~$_$9$k$3$H$,$G$-$^$;$s!*(B"
  4166.                       "Cannot reread private JISYO!" ))))))
  4167.  
  4168. (defun skk-record-jisyo-data (jisyo-buffer)
  4169.   ;; $B<-=q%G!<%?!<$r<h$j!"(BEmacs $B$N=*N;$N:]$G$"$l$P!"$=$N%G!<%?!<$r(B 
  4170.   ;; skk-record-file $B$KJ]B8$7!"$=$l0J30$G$"$l$P!"$=$l$r%(%3!<$9$k!#(B
  4171.   (if (or (not skk-keep-record) (> 1 skk-kakutei-count))
  4172.       nil
  4173.     (with-temp-file skk-record-file
  4174.       (insert-file-contents skk-record-file)
  4175.       (goto-char (point-min))
  4176.       (insert
  4177.        (format
  4178.         "%s  $BEPO?(B: %3d  $B3NDj(B: %4d  $B3NDjN((B: %3d%%  $B8l?t(B:%6d\n"
  4179.         (current-time-string)
  4180.         skk-touroku-count skk-kakutei-count
  4181.         (/ (* 100 (- skk-kakutei-count skk-touroku-count))
  4182.            skk-kakutei-count )
  4183.         (if skk-count-private-jisyo-candidates-exactly
  4184.             (skk-count-jisyo-candidates (expand-file-name skk-jisyo))
  4185.           ;; 1 $B9T(B 1 $B8uJd$H$_$J$9!#(B
  4186.           (with-current-buffer jisyo-buffer
  4187.             (- (count-lines (point-min) (point-max)) 2) )))))
  4188.     (setq skk-touroku-count 0 skk-kakutei-count 0) ))
  4189.  
  4190. (defun skk-count-jisyo-candidates (file)
  4191.   "SKK $B<-=q$N8uJd?t$r?t$($k!#(B
  4192. `[' $B$H(B `]' $B$K0O$^$l$?Aw$j2>L>Kh$N%V%m%C%/Fb$O?t$($J$$!#(B"
  4193.   (interactive
  4194.    (list (read-file-name
  4195.           (format "Jisyo File: (default: %s) " skk-jisyo)
  4196.           "~/" skk-jisyo 'confirm )))
  4197.   ;; mule@emacs19.31 $B$@$H2<5-$N$h$&$K$9$k$H(B (`$B%!(B' $B$,860x$N$h$&(B) $B2?8N$+(B 
  4198.   ;; default-directory $B$NKvHx$K2~9T$,IU$/!#(B
  4199.   ;; $BDL>o$O5$$,IU$+$J$$$,!"(Brsz-mini.el $B$r;H$C$F(B resize-minibuffer-mode $B$r(B 
  4200.   ;; non-nil $B$K$7$F$$$k$HITMW$J(B 2 $B9TL\$,=P8=$9$k!#(B
  4201.   ;; (interactive "f$B<-=q%U%!%$%k(B: ")
  4202.   (with-current-buffer (find-file-noselect file)
  4203.     (save-match-data
  4204.       (let ((count 0)
  4205.             (min (point-min))
  4206.             (max (if (interactive-p) (point-max)))
  4207.             (interactive-p (interactive-p))
  4208.             mc-flag enable-multibyte-characters )
  4209.         (goto-char min)
  4210.         (if (or
  4211.              ;; $B$3$A$i$O(B skk-save-point $B$r;H$o$:!"%]%$%s%H$r0\F0$5$;$k!#(B
  4212.              (not (re-search-forward "^;; okuri-ari entries.$" nil t nil))
  4213.              (not
  4214.               (skk-save-point
  4215.                 (re-search-forward "^;; okuri-nasi entries.$" nil t nil) )))
  4216.             (skk-error "$B$3$N%U%!%$%k$O(B SKK $B<-=q$G$O$"$j$^$;$s(B"
  4217.                        "This file is not a SKK dictionary") )
  4218.         (while (search-forward "/" nil t)
  4219.           (cond ((looking-at "\\[")
  4220.                  (forward-line 1)
  4221.                  (beginning-of-line) )
  4222.                 ((not (eolp))
  4223.                  (setq count (1+ count)) ))
  4224.           (if interactive-p
  4225.               (message "Counting jisyo candidates...%3d%% done"
  4226.                        (/ (* 100 (- (point) min)) max) )))
  4227.         (if (interactive-p)
  4228.             (message "%d entries" count)
  4229.           count )))))
  4230.  
  4231. (defun skk-create-file (file &optional message)
  4232.   ;; FILE $B$,$J$1$l$P!"(BFILE $B$H$$$&L>A0$N6u%U%!%$%k$r:n$k!#(B
  4233.   ;; $B%*%W%7%g%J%k0z?t$N(B MESSAGE $B$r;XDj$9$k$H!"%U%!%$%k:n@.8e$=$N%a%C%;!<%8$r(B
  4234.   ;; $B%_%K%P%C%U%!$KI=<($9$k!#(B
  4235.   (let ((file (expand-file-name file)))
  4236.     (or (file-exists-p file)
  4237.         (progn
  4238.           (write-region 1 1 file nil 0)
  4239.           (if message
  4240.               (progn
  4241.                 (message message)
  4242.                 (sit-for 3) ))))))
  4243.  
  4244. (defun skk-get-jisyo-buffer (file &optional nomsg)
  4245.   ;; FILE $B$r3+$$$F(B SKK $B<-=q%P%C%U%!$r:n$j!"%P%C%U%!$rJV$9!#(B
  4246.   ;; $B%*%W%7%g%J%k0z?t$N(B NOMSG $B$r;XDj$9$k$H%U%!%$%kFI$_9~$_$N:]$N%a%C%;!<%8$r(B
  4247.   ;; $BI=<($7$J$$!#(B
  4248.   (if file
  4249.       (let ((inhibit-quit t)
  4250.             ;; expand-file-name $B$r8F$s$G$*$+$J$$$H!";H$C$F$$$k(B OS $B>e$"$j$($J$$(B
  4251.             ;; $B%U%!%$%k%M!<%`$G$b!"$=$N$^$^EO$5$l$F$7$^$&!#(B
  4252.             ;; ($BNc(B) MSDOS $B$N>l9g(B ~/_skk-jisyo $B$N<B:]$N%U%!%$%k%M!<%`$O!"(BOS $B>e(B
  4253.             ;; $B$N@)8B$+$i(B ~/_skk-jis $B$H$J$k!#(Bexpand-file-name $B$r8F$P$J$$$H!"(B
  4254.             ;; " *_skk-jisyo*" $B$H$$$&%P%C%U%!$,$G$-$F$7$^$$!"(Bskk-save-jisyo $B$J(B
  4255.             ;; $B$IB>$N4X?t$K1F6A$,=P$k!#(B
  4256.             (file (expand-file-name file))
  4257.             (jisyo-buf (concat " *" (file-name-nondirectory file)
  4258.                                "*" )))
  4259.         ;; $B<-=q%P%C%U%!$H$7$F%*!<%W%s$5$l$F$$$k$J$i!"2?$b$7$J$$!#(B
  4260.         (or (get-buffer jisyo-buf)
  4261.             (with-current-buffer (setq jisyo-buf (get-buffer-create jisyo-buf))
  4262.               (buffer-disable-undo jisyo-buf)
  4263.               (auto-save-mode -1)
  4264.               ;; $B%o!<%-%s%0%P%C%U%!$N%b!<%I%i%$%s$O%"%C%W%G!<%H$5$l$J$$!)(B
  4265.               ;;(make-local-variable 'line-number-mode)
  4266.               ;;(make-local-variable 'column-number-mode)
  4267.               (setq buffer-read-only nil
  4268.                     case-fold-search nil
  4269.                     ;; buffer-file-name $B$r(B nil $B$K$9$k$H!"<-=q%P%C%U%!$KF~$j9~(B
  4270.                     ;; $B$s$G(B C-x C-s $B$7$?$H$-$K%U%!%$%k%M!<%`$r?R$M$F$/$k$h$&$K(B
  4271.                     ;; $B$J$k$,!"(BM-x compile $B$J$IFbIt$G(B save-some-buffers $B$r%3!<(B
  4272.                     ;; $B%k$7$F$$$k%3%^%s%I$r;H$C$?$H$-$G$b%;!<%V$9$k$+$I$&$+$r(B
  4273.                     ;; $B?R$M$F$3$J$/$J$k!#(B
  4274.                     ;;buffer-file-name file
  4275.                     ;;cache-long-line-scans nil
  4276.                     ;;column-number-mode nil
  4277.                     ;;line-number-mode nil
  4278.                     ;; dabbrev $B$N%5!<%A$H$J$k%P%C%U%!$K$J$i$J$$$h$&$KB8:_$7$J(B
  4279.                     ;; $B$$%b!<%IL>$K$7$F$*$/!#<B32$N$"$kI{:nMQ$O$J$$$O$:!#(B
  4280.                     major-mode 'skk-jisyo-mode
  4281.                     mode-name "SKK$B<-=q(B" )
  4282.               (or nomsg
  4283.                   (skk-message "SKK $B<-=q(B %s $B$r%P%C%U%!$KFI$_9~$s$G$$$^$9(B..."
  4284.                                "Inserting contents of %s ..."
  4285.                                (file-name-nondirectory file) ))
  4286.           (let ((coding-system-for-read 'euc-japan); XXX
  4287.             enable-character-unification)
  4288.                  (insert-file-contents file) )
  4289.               (skk-set-jisyo-code)
  4290.               (or nomsg
  4291.                   (skk-message
  4292.                    "SKK $B<-=q(B %s $B$r%P%C%U%!$KFI$_9~$s$G$$$^$9(B...$B40N;!*(B"
  4293.                    "Inserting contents of %s ...done"
  4294.                    (file-name-nondirectory file) ))
  4295.               (skk-setup-jisyo-buffer)
  4296.               (set-buffer-modified-p nil)
  4297.               jisyo-buf )))))
  4298.  
  4299. (defun skk-set-jisyo-code ()
  4300.   ;; $BJ8;z%3!<%I$r(B CODE $B$K%;%C%H$9$k!#(B
  4301.   (if (not skk-jisyo-code)
  4302.       nil
  4303.     (if (stringp skk-jisyo-code)
  4304.         (setq skk-jisyo-code (cdr
  4305.                               (assoc skk-jisyo-code skk-coding-system-alist) )))
  4306.     (if (fboundp 'set-buffer-file-coding-system)
  4307.         (set-buffer-file-coding-system skk-jisyo-code)
  4308.       (set-file-coding-system skk-jisyo-code) )))
  4309.  
  4310. (defun skk-setup-jisyo-buffer ()
  4311.   ;; skk-jisyo $B$N<-=q%P%C%U%!$G!"(B
  4312.   ;; (1)$B6u%P%C%U%!$G$"$l$P!"?7$7$/%X%C%@!<$r:n$j!"(B
  4313.   ;; (2)$B<-=q%(%s%H%j$,$"$k4{B8$N<-=q%P%C%U%!$J$i$P!"%X%C%@!<$,@5$7$$$+$I$&$+$r(B
  4314.   ;;    $B%A%'%C%/$9$k!#(B
  4315.   ;;
  4316.   ;; skk-okuri-ari-min $B$H(B skk-okuri-nasi-min $B$N0LCV$rJQ99$7$?!#(B
  4317.   ;;                       $B"-(B $B?7$7$$(B skk-okuri-ari-min
  4318.   ;;   ;; okuri-ari entries.
  4319.   ;;   $B"+(B $B0JA0$N(B skk-okuri-ari-min
  4320.   ;;
  4321.   ;;   $B"-(B skk-okuri-ari-max $B"-(B $B?7$7$$(B skk-okuri-nasi-min
  4322.   ;;   ;; okuri-nasi entries.
  4323.   ;;   $B"+(B $B0JA0$N(B skk-okuri-nasi-min
  4324.   ;;
  4325.   ;;
  4326.   ;; $BJQ99A0$N0LCV$G$"$l$P!"2<5-$N$h$&$J6u<-=q$N>l9g!"(B
  4327.   ;;
  4328.   ;;   ;; okuri-ari entries.
  4329.   ;;   ;; okuri-nasi entries.
  4330.   ;;
  4331.   ;; skk-okuri-ari-min $B$H(B skk-okuri-ari-max $B$N%^!<%+!<$,=E$J$C$F$7$^$$!"(B
  4332.   ;; skk-okuri-ari-min $B$N0LCV$KA^F~$7$?%(%s%H%j$,(B skk-okuri-ari-max $B$N%^!<%+!<(B
  4333.   ;; $B$r8eJ}$K2!$7$d$i$J$$!#(B
  4334.   ;;
  4335.   ;; $B$3$N4X?t$N%*%j%8%J%k$NL>>N$O!"(Bj-check-jisyo $B$@$C$?$,!"(Bskk-check-jisyo $B$H(B
  4336.   ;; $B$$$&L>A0$K$9$k$H(B skk-tools.el $BFb$N4X?tL>$H=EJ#$9$k!#(B
  4337.   ;; case-fold-search $B$O!"<-=q%P%C%U%!$G$O>o$K(B nil$B!#(B
  4338.   (let (mc-flag enable-multibyte-characters)
  4339.     (save-match-data
  4340.       (if (eq (buffer-size) 0)
  4341.           ;; $B6u%P%C%U%!$@$C$?$i!"%X%C%@!<$N$_A^F~!#(B
  4342.           (insert ";; okuri-ari entries.\n" ";; okuri-nasi entries.\n") )
  4343.       (goto-char (point-min))
  4344.       (if (re-search-forward "^;; okuri-ari entries.$" nil 'noerror)
  4345.           ;; $B8GDj%]%$%s%H$J$N$G!"(B(point) $B$G==J,!#(B
  4346.           (setq skk-okuri-ari-min (point))
  4347.         (skk-error "$BAw$j$"$j%(%s%H%j$N%X%C%@!<$,$"$j$^$;$s!*(B"
  4348.                    "Header line for okuri-ari entries is missing!" ))
  4349.       (if (re-search-forward "^;; okuri-nasi entries.$" nil 'noerror)
  4350.           (progn
  4351.             (beginning-of-line)
  4352.             ;; $B6&M-<-=q$J$i8GDj%]%$%s%H$G$bNI$$$N$@$,!"<-=q%P%C%U%!$GJT=8$r9T(B
  4353.             ;; $B$J$C$?$H$-$N$3$H$rG[N8$7$F%^!<%+!<$K$7$F$*$/!#(B
  4354.             (setq skk-okuri-ari-max (point-marker))
  4355.             (forward-line 1)
  4356.             (backward-char 1)
  4357.             (setq skk-okuri-nasi-min (point-marker)) )
  4358.         (skk-error "$BAw$j$J$7%(%s%H%j$N%X%C%@!<$,$"$j$^$;$s!*(B"
  4359.                    "Header line for okuri-nasi entries is missing!" )))))
  4360.  
  4361. ;;;###skk-autoload
  4362. (defun skk-search ()
  4363.   ;; skk-current-search-prog-list $B$NMWAG$K$J$C$F$$$k%W%m%0%i%`$rI>2A$7$F!"(B
  4364.   ;; skk-henkan-key$B$r%-!<$K$7$F8!:w$r9T$&!#(B
  4365.   (let (l)
  4366.     (while (and (null l) skk-current-search-prog-list)
  4367.       (setq l (eval (car skk-current-search-prog-list))
  4368.             skk-current-search-prog-list (cdr skk-current-search-prog-list) ))
  4369.     l ))
  4370.  
  4371. (defun skk-search-relation ()
  4372.   (let ((last 
  4373.      (if (not (and
  4374.            skk-last-henkan-result
  4375.            (markerp skk-last-henkan-point)
  4376.            (< skk-last-henkan-point (point))
  4377.            (< (- (point) skk-last-henkan-point) skk-relation-length) ))
  4378.          nil
  4379.        skk-last-henkan-result )))
  4380.     (skk-attr-search-relation
  4381.      skk-henkan-key
  4382.      (or skk-henkan-okurigana skk-okuri-char)
  4383.      last )))
  4384.  
  4385. (defun skk-attr-search-relation (midasi okuri last)
  4386.   (if skk-debug (message "%S" midasi okuri last))
  4387.   (or skk-attr-alist (skk-attr-read))
  4388.   (let ((entries (cdr (skk-attr-get-table-for-midasi midasi okuri)))
  4389.     ret rest )
  4390.     (if skk-debug (message "%S" entries))
  4391.     (while entries
  4392.       (let* ((entry (car entries))
  4393.          (rel (assq 'relation (cdr entry))))
  4394.     (if (or (null last) (member last (cdr rel)))
  4395.         (setq ret (nconc ret (list (car entry))))
  4396.       (setq rest (nconc rest (list (car entry)))) ) )
  4397.       (setq entries (cdr entries)) )
  4398.     (nconc ret rest) ))
  4399.          
  4400. (defun skk-update-relation (midasi okuri word last &optional purge)
  4401.   (skk-attr-update-relation midasi okuri word last purge) )
  4402.  
  4403. (defun skk-attr-update-relation (midasi okuri word last &optional purge)
  4404.   (or skk-attr-alist (skk-attr-read))
  4405.   (if skk-debug (message "update %S %S %S %S" midasi okuri word last))
  4406.   (if purge
  4407.       (skk-attr-purge midasi okuri word)
  4408.     (let* ((table (skk-attr-get-table-for-midasi midasi okuri))
  4409.        (entry (assoc word (cdr table)))
  4410.        (oldattr (assq 'relation (cdr entry)))
  4411.        (listlast (if last (list last) nil)) )
  4412.       (cond (oldattr
  4413.          (if  last
  4414.          (progn
  4415.            (setcdr oldattr (cons last
  4416.                      (delete last (cdr oldattr)) ))
  4417.            (let ((tail (nthcdr skk-relation-record-num oldattr)))
  4418.              (if tail
  4419.              (setcdr tail nil) )))))
  4420.         (entry
  4421.          (setcdr entry (cons (cons 'relation listlast)
  4422.                  (cdr entry))))
  4423.         (table
  4424.          (setcdr table (cons (list word
  4425.                        (list 'okurigana okuri)
  4426.                        (cons 'relation listlast) )
  4427.                  (cdr table) )))
  4428.         ;; new entry
  4429.         (t (skk-attr-put-1 midasi okuri word 'relation listlast)) ))))
  4430.  
  4431. (defun skk-search-jisyo-file (file limit &optional nomsg)
  4432.   ;; SKK $B<-=q%U%)!<%^%C%H$N(B FILE $B$G(B skk-henkan-key $B$r%-!<$K$7$F8!:w$r9T$&!#(B
  4433.   ;; $B8!:w%j!<%8%g%s$,(B LIMIT $B0J2<$K$J$k$^$G%P%$%J%j%5!<%A$r9T$$!"$=$N8e%j%K%"(B
  4434.   ;; $B%5!<%A$r9T$&!#(B
  4435.   ;; LIMIT $B$,(B 0 $B$G$"$l$P!"%j%K%"%5!<%A$N$_$r9T$&!#(B
  4436.   ;; $B<-=q$,%=!<%H$5$l$F$$$J$$$N$G$"$l$P!"(BLIMIT $B$r(B 0 $B$9$kI,MW$,$"$k!#(B
  4437.   ;; $B%*%W%7%g%J%k0z?t$N(B NOMSG $B$,(B non-nil $B$G$"$l$P(B skk-get-jisyo-buffer $B$N%a%C(B
  4438.   ;; $B%;!<%8$r=PNO$7$J$$$h$&$K$9$k!#(B
  4439.   (let ((jisyo-buffer (skk-get-jisyo-buffer file nomsg)))
  4440.     (if jisyo-buffer
  4441.         ;; skk-henkan-key $B$H(B skk-henkan-okurigana $B$O%+%l%s%H%P%C%U%!$N%m!<%+%k(B
  4442.         ;; $BCM!#(B
  4443.         (let ((okurigana (or skk-henkan-okurigana skk-okuri-char))
  4444.               (midasi 
  4445.                (if skk-use-numeric-conversion
  4446.            ;; skk-henkan-key $B$,(B nil $B$N$3$H$,$"$k!#2?8N(B?
  4447.                    (skk-compute-numeric-henkan-key skk-henkan-key)
  4448.                  skk-henkan-key ))
  4449.               entry-list entry )
  4450.           (with-current-buffer jisyo-buffer
  4451.             (setq skk-henkan-key midasi
  4452.                   entry-list (skk-search-jisyo-file-1 okurigana limit) )
  4453.             (if entry-list
  4454.                 (progn
  4455.                   (setq entry
  4456.                         (cond ((and okurigana skk-henkan-okuri-strictly)
  4457.                                ;; $BAw$j2>L>$,F10l$N%(%s%H%j$N$_$rJV$9!#(B
  4458.                                (nth 2 entry-list) )
  4459.                               ((and okurigana skk-henkan-strict-okuri-precedence)
  4460.                                ;; $BAw$j2>L>$,F10l$N%(%s%H%j$N$&$7$m$K!"(B
  4461.                                ;; $B$=$NB>$N%(%s%H%j$r$D$1$F$+$($9!#(B
  4462.                                (skk-nunion (nth 2 entry-list) (car entry-list)))
  4463.                               (t (car entry-list)) ))
  4464.                   (if (and (boundp 'skk-attr-search-function)
  4465.                            skk-attr-search-function )
  4466.                       (funcall skk-attr-search-function midasi okurigana entry)
  4467.                     entry ))))))))
  4468.  
  4469. (defun skk-search-jisyo-file-1 (okurigana limit &optional delete)
  4470.   ;; skk-search-jisyo-file $B$N%5%V%k!<%A%s!#(Bskk-compute-henkan-lists $B$r;HMQ$7!"(B
  4471.   ;; $B8+=P$78l$K$D$$$F$N%(%s%H%j$N>pJs$rJV$9!#(B
  4472.   ;; DELETE $B$,(B non-nil $B$G$"$l$P!"(BMIDASI $B$K%^%C%A$9$k%(%s%H%j$r:o=|$9$k!#(B
  4473.   (let ((key (concat "\n" skk-henkan-key " /"))
  4474.         min max size p )
  4475.     (save-match-data
  4476.       ;; skk-okuri-ari-min $B$H(B skk-okuri-ari-max $B$O<-=q%P%C%U%!$N%m!<%+%kCM!#(B
  4477.       (if okurigana
  4478.           (setq min skk-okuri-ari-min
  4479.                 max skk-okuri-ari-max )
  4480.         (setq min skk-okuri-nasi-min
  4481.               max (point-max) ))
  4482.       (if (> limit 0)
  4483.           (while (progn (setq size (- max min)) (> size limit))
  4484.             (goto-char (+ min (/ size 2)))
  4485.             (beginning-of-line)
  4486.             (setq p (point))
  4487.             ;; $BAw$j$"$j$J$i5U=g$KHf3S$r9T$J$&!#(B
  4488.             (if
  4489.                 (if okurigana
  4490.                     (string< (skk-buffer-substring p (1- (search-forward  " ")))
  4491.                              skk-henkan-key )
  4492.                   (string< skk-henkan-key
  4493.                            (skk-buffer-substring p (1- (search-forward " "))) ))
  4494.                 (setq max p)
  4495.               (setq min p) )))
  4496.       (goto-char min)
  4497.       ;; key $B$,8!:w3+;OCOE@$K$"$C$?>l9g$G$b8!:w2DG=$J$h$&$K0lJ8;zLa$k!#(Bkey $B$,(B
  4498.       ;; $B$=$N@hF,ItJ,$K(B "\n" $B$r4^$s$G$$$k$3$H$KCm0U!#(B
  4499.       (or (bobp) (backward-char 1))
  4500.       ;; $B8zN($,NI$$$h$&$K(B kanji-flag, mc-flag, enable-multibyte-characters $B$r(B
  4501.       ;; nil $B$K$7$F$*$/!#(B
  4502.       ;; case-fold-search $B$O!"<-=q%P%C%U%!$G$O>o$K(B nil$B!#(B
  4503.       (let (mc-flag)
  4504.             ;; enable-multibyte-characters)
  4505.         (if (search-forward key max 'noerror)
  4506.             (prog1
  4507.                 (skk-compute-henkan-lists okurigana)
  4508.               (if delete
  4509.                   (progn
  4510.                     (beginning-of-line)
  4511.                     (delete-region (point)
  4512.                                    (progn (forward-line 1) (point)) )))))))))
  4513.  
  4514.  
  4515. (defun skk-compute-henkan-lists (okurigana)
  4516.   ;; $B<-=q%(%s%H%j$r(B 4 $B$D$N%j%9%H$KJ,2r$9$k!#(B
  4517.   ;;
  4518.   ;; $BAw$j$J$7(B ($BNc$($P!"<-=q%(%s%H%j(B "$B$F$s$5$$(B /$BE>:\(B/$BE7:R(B/$BE7:M(B/" $B$N=hM}(B)
  4519.   ;; entry1 := ("$BE>:\(B" "$BE7:R(B" "$BE7:M(B") == $BA4%(%s%H%j(B
  4520.   ;; entry2 := nil
  4521.   ;; entry3 := nil
  4522.   ;; entry4 := nil
  4523.   ;;
  4524.   ;; $BAw$j$"$j(B ($BNc$($P!"!V5c$/!W$NJQ49$r9T$C$?>l9g$N!"<-=q%(%s%H%j(B
  4525.   ;;           "$B$J(Bk /$BK4(B/$BL5(B/$BLD(B/$B5c(B/[$B$/(B/$BL5(B/$BLD(B/$B5c(B/]/[$B$-(B/$BK4(B/]/" $B$N=hM}(B)
  4526.   ;; entry1 := ("$BK4(B" "$BL5(B" "$BLD(B" "$B5c(B")  == $B4A;zItJ,$NA4%(%s%H%j(B
  4527.   ;; entry2 := ("[$B$/(B")                == $BB>$NAw$j2>L>$r;H$&4A;z%(%s%H%j(B ($B$"$l(B
  4528.   ;;                                     $B$P(B) + $B:#2s$NJQ49$NAw$j2>L>ItJ,(B
  4529.   ;; entry3 := ("$BL5(B" "$BLD(B" "$B5c(B")       == $B:#2s$NJQ49$NAw$j2>L>$r;H$&2DG=@-$N(B
  4530.   ;;                                     $B$"$kA44A;z%(%s%H%j(B
  4531.   ;; entry4 := ("]" "[$B$-(B" "$BK4(B" "]")   == $BB>$NAw$j2>L>$r;H$&4A;z%(%s%H%j(B ($B;D(B
  4532.   ;;                                     $B$j!#$"$l$P(B)
  4533.   ;;
  4534.   ;;   * "[" $B$OD>8e$KB3$/$R$i$,$J$rAw$j2>L>$K;}$D4A;z$N%(%s%H%j$N=i$^$j$rI=$7!"(B
  4535.   ;;     "]" $B$O!"3:Ev$NAw$j2>L>%0%k!<%W$N=*$j$r<($9!#(B
  4536.   ;;
  4537.   ;; $B$3$N4X?t$O!"JQ49;~$H!"3NDjD>8e$N<-=q$N%"%C%W%G!<%H;~$N(B 2 $BEY8F$P$l$k(B
  4538.   ;; ($BJQ49;~$K8!:w$r9T$C$?<-=q$,!"(Bskk-jisyo $B$H$O8B$i$J$$$N$G!"(B2 $BEY7W;;$;$6$k(B
  4539.   ;; $B$rF@$J$$(B)$B!#(B
  4540.   ;;
  4541.   ;; $BJQ49;~$O!"(Bskk-henkan-okuri-strictly $B$,(B non-nil $B$G$"$l$P!"(B
  4542.   ;; $B7W;;7k2L$N(B entry3$B$r!"(Bskk-henkan-okuri-strictly $B$,(B nil $B$G$"$C$F(B
  4543.   ;; $B$+$D(B skk-henkan-strict-okuri-precedence $B$,(B non-nil $B$"$l$P(B
  4544.   ;; (skk-uniion entry3 entry1) $B$r<h$j=P$9!#(B
  4545.   ;; $B$U$?$D$NJQ?t$,$H$b$K(B nil $B$N>l9g$O(B entry1 $B$r<h$j=P$9!#(B
  4546.   (if (not okurigana)
  4547.       (list (string-split
  4548.              "/"
  4549.              (skk-buffer-substring (point)
  4550.                                    (progn (end-of-line) (1- (point))) ))
  4551.             nil nil nil )
  4552.     (save-match-data
  4553.       (let ((stage 1) (q1 (queue-create)) (q2 (queue-create))
  4554.             (q3 (queue-create)) (q4 (queue-create))
  4555.             (okuri-key (concat "\[" okurigana)) item headchar )
  4556.         (catch 'exit
  4557.           (while (not (eolp))
  4558.             (setq item (skk-buffer-substring (point) (1- (search-forward "/")))
  4559.                   headchar (if (string= item "") (skk-int-char 0) (aref item 0)) )
  4560.             (cond ((and (eq headchar ?\[) ; ?\[
  4561.                         (<= stage 2) )
  4562.                    (if (string= item okuri-key)
  4563.                        (progn (queue-enqueue q2 item)
  4564.                               (setq stage 3) )
  4565.                      (setq stage 2)
  4566.                      (queue-enqueue q2 item) ))
  4567.                   ((eq stage 1)
  4568.                    (queue-enqueue q1 item) )
  4569.                   ((eq stage 2)
  4570.                    (queue-enqueue q2 item) )
  4571.                   ((eq stage 3)
  4572.                    (if (eq headchar ?\]) ; ?\]
  4573.                        (progn (setq stage 4)
  4574.                               (queue-enqueue q4 item) )
  4575.                      (queue-enqueue q3 item) ))
  4576.                   ((eq stage 4)
  4577.                    (queue-enqueue q4 item) ))))
  4578.         ;;        entry1          entry2        entry3          entry4
  4579.         (list (queue-all q1) (queue-all q2) (queue-all q3) (queue-all q4)) ))))
  4580.  
  4581. ;; $B%-%e!<4XO"$N4X?t$N;HMQ$K:]$7$F$O!"!V%W%m%0%i%`$N9=B$$H<B9T!W(B(H. $B%(!<%Y%k%=(B
  4582. ;; $B%s!"(BG.J.$B%5%9%^%s!"(BJ.$B%5%9%^%sCx!"855HJ8CKLu!#%^%0%m%&%R%k=PHG(B) $B$H(B Elib (the
  4583. ;; GNU emacs lisp library version 1.0) $B$r;29M$K$7$?!#>e5-$NJ88%$G2r@b$5$l$F$$(B
  4584. ;; $B$k%-%e!<$NI=8=$O!"(BElib $B$N(B queue-m.el $B$K$*$$$F<B8=$5$l$F$$$k$b$N$H$[$\F1$8<B(B
  4585. ;; $BAu$H$J$C$F$$$k!#(B
  4586. ;;
  4587. ;; $B%j%9%H$G$N%-%e!<$NI=8=$O!"6qBNE*$K$ONc$($P(B ((A B C D E F) F) $B$N$h$&$J7A$K$J$C(B
  4588. ;; $B$F$*$j!"(Bcar $B$N%j%9%H(B (A B C D E F) $B$,%-%e!<$NA4BN$rI=$o$7!"%-%e!<$N(B nth 1 
  4589. ;; $B$r<h$C$?$H$-$N(B F $B$,%-%e!<$N:G8eHx$rI=$o$9!#%-%e!<$N(B cdr $B$r<h$C$?$H$-$N(B (F) 
  4590. ;; $B$H$$$&%j%9%H$O!"%-%e!<$N(B car $B$KBP$7(B nthcdr 5 $B$r<h$C$?$H$-$N%j%9%H(B (F) $B$HF1(B
  4591. ;; $B$8$b$N$G$"$k!#=>$$!"(Bcdr $B$N%j%9%H$N8e$K?7$7$$MWAG$rDI2C$9$k$3$H$G!"(Bcar $B$GI=(B
  4592. ;; $B$o$5$l$k%-%e!<$NKvHx$K?7$7$$MWAG$rDI2C$9$k$3$H$,$G$-$k!#(B
  4593. ;; $B0lJ}!"(Bnconc $B$d(B append $B$G$D$J$0$K$O!"$=$l$i$N4X?t$NBh#10z?t$N%j%9%H$NA4$F$N(B
  4594. ;; $BMWAG$rAv::$;$M$P$J$i$:!"(BO(n) $B$N;~4V$,$+$+$k$N$G!"D9$$%j%9%H$r$D$J$0$H$-$OHf(B
  4595. ;; $B3SE*%3%9%H$,$+$+$k!#(B
  4596. ;;
  4597. ;; $B$5$F!"6u$N(B queue == (cons nil nil) $B$KBP$7!"?7$7$$MWAG(B A $B$rDI2C$9$kJ}K!$r@b(B
  4598. ;; $BL@$9$k!#$^$:!"?7$7$$MWAG(B A $B$N$_$r4^$s$@D9$5(B 1 $B$N%j%9%H(B (A) $B$r:n$k(B ($B2>$K(B 
  4599. ;; new-pair $B$H$$$&JQ?t$K<h$k(B)$B!#<!$K!"(B(setcar queue new-pair) $B$r9T$J$&$3$H$K$h(B
  4600. ;; $B$j!"(Bqueue $B$,(B ((A)) $B$H$J$k(B (setcar, setcdr $B$NJV$jCM$O!"(Bnew-pair $B$G$"$k$3$H$K(B
  4601. ;; $BCm0U(B)$B!#<!$K(B (setcdr queue new-pair) $B$7$F(B ((A) A) $B$H$J$C$?$H$3$m$r?^<($9$k!#(B
  4602. ;; front, rear $B$NN>J}$N%]%$%s%?$,(B (A) $B$r;X$9$h$&$K$9$k(B ($B%-%e!<$NMWAG$,(B A $B$7$+(B
  4603. ;; $B$J$$$N$G!"(Bfront, rear $B%]%$%s%?$H$b$KF1$8$b$N$r;X$7$F$$$k(B)$B!#(B
  4604. ;;         queue
  4605. ;;   +-------+-------+
  4606. ;;   | Front |  Rear |
  4607. ;;   +---|---+---|---+
  4608. ;;       |       +---> +---------------+
  4609. ;;       +------------>|   o   |  nil  |
  4610. ;;                     +---|---+-------+
  4611. ;;                         |      +-------+
  4612. ;;                         +----> |   A   |
  4613. ;;                                +-------+
  4614. ;;
  4615. ;; $B>e5-$N(B queue, ((A) A) $B$KBP$7!"99$K?7$7$$MWAG(B B $B$rDI2C$9$k!#Nc$K$h$j(B B $B$N$_(B
  4616. ;; $B$r4^$`D9$5(B 1 $B$N%j%9%H(B (B) $B$r:n$j!"JQ?t(B new-pair $B$K<h$k!#$3$3$G(B
  4617. ;; (setcdr (cdr queue) new-pair) $B$rI>2A$9$k$H(B ($BCm(B1)$B!"(B* $B$N8D=j$N%]%$%s%?A`:n$,(B
  4618. ;; $B9T$J$o$l$k!#%-%e!<$N:G8eJ}$K?7$7$$MWAG$G$"$k(B B $B$,DI2C$5$l$k$3$H$K$J$k!#(B
  4619. ;; queue $B$O(B ((A B) A B) $B$H$J$k!#(B
  4620. ;;         queue
  4621. ;;   +-------+-------+
  4622. ;;   | Front |  Rear |
  4623. ;;   +---|---+---|---+
  4624. ;;       |       +---> +---------------+   *    +---------------+
  4625. ;;       +------------>|   o   |   o --|------->|   o   |  nil  |
  4626. ;;                     +---|---+-------+        +-------+-------+
  4627. ;;                         |      +-------+         |      +-------+
  4628. ;;                         +----> |   A   |         +----> |   B   |
  4629. ;;                                +-------+                +-------+
  4630. ;;
  4631. ;;   $BCm(B1; $BDI2CA0$N%-%e!<$NMWAG$,(B 1 $B$D$N$H$-$O!"(Bfront $B$b(B rear $B$bF1$8$b$N$r;X$7(B
  4632. ;;        $B$F$$$k$N$G(B (setcdr (car queue) new-pair) $B$G$bEy2A$@$,!"%-%e!<$NMWAG(B
  4633. ;;        $B$,(B 2 $B$D0J>e$N$H$-$O(B (setcdr (cdr queue) new-pair) $B$G$J$$$H$^$:$$!#(B
  4634. ;;
  4635. ;; $B:G8e$K(B (setcdr queue new-pair) $B$rI>2A$9$k$3$H$K$h$j!"(Brear $B%]%$%s%?$rD%$jJQ(B
  4636. ;; $B$($k(B (* $B$N8D=j$N%]%$%s%?A`:n$,9T$J$o$l$k(B)$B!#(Brear $B%]%$%s%?$,%-%e!<$N:G8eJ}$N(B
  4637. ;; $BMWAG$r;X$9$h$&$K$9$k!#(Bfront $B%]%$%s%?$,;X$9%j%9%H$O%-%e!<$NA4$F$NMWAG$rI=$o(B
  4638. ;; $B$9!#(B
  4639. ;;         queue
  4640. ;;   +-------+-------+           *
  4641. ;;   | Front |  Rear |---------------------+
  4642. ;;   +---|---+-------+                     |
  4643. ;;       |             +---------------+   +--> +---------------+
  4644. ;;       +------------>|   o   |   o --|------->|   o   |  nil  |
  4645. ;;                     +---|---+-------+        +-------+-------+
  4646. ;;                         |      +-------+         |      +-------+
  4647. ;;                         +----> |   A   |         +----> |   B   |
  4648. ;;                                +-------+                +-------+
  4649. ;;
  4650. ;; $B$3$N$h$&$K%-%e!<$N:G8eJ}$K?7$7$$MWAG$rDI2C$9$k$3$H(B ($B%j%9%H$N:G8eJ}$KD9$5(B 1
  4651. ;; $B$N?7$7$$%j%9%H$r$D$J$2$k$3$H(B) $B$,(B 2 $B2s$N%]%$%s%?A`:n$G2DG=$H$J$k$N$G!"$I$N$h(B
  4652. ;; $B$&$JD9$$%j%9%H$G$"$C$F$bO"7k$K$+$+$k%3%9%H$O0lDj(B (O(1) $B$N4X?t$G$"$k(B) $B$G$"$k!#(B
  4653. ;; $B$J$*!"8=>u$G$O!"J?6Q$7$F0B2A$K%j%9%H$N:G8eJ}$KMWAG$r$D$J$2$k!"$H$$$&L\E*$K(B
  4654. ;; $B$@$1%-%e!<$r;H$C$F$$$k!#%-%e!<K\Mh$NL\E*$G$O;HMQ$7$F$*$i$J$$$N$G!"Nc$($P!"(B
  4655. ;; $B2<5-$N$h$&$J4X?t$O;HMQ$7$F$$$J$$!#(B
  4656. ;; queue-last, queue-first, queue-nth, queue-nthcdr, queue-dequeue
  4657.  
  4658. ;;;###skk-autoload
  4659. (defun skk-nunion (x y)
  4660.   ;; X $B$H(B Y $B$NOB=89g$r:n$k!#Ey$7$$$+$I$&$+$NHf3S$O!"(Bequal $B$G9T$o$l$k!#(BX $B$K(B Y
  4661.   ;; $B$rGK2uE*$KO"@\$9$k!#(B
  4662.   (cond ((null x) y)
  4663.         ((null y) x)
  4664.         (t (let ((e x))
  4665.              (while e
  4666.                (setq y (delete (car e) y)
  4667.                      e (cdr e) ))
  4668.              (if y
  4669.                  ;; $B>e5-$N(B while $B%k!<%W$NCf$N(B delete $B$H2<5-$N(B nconc $B$H$r9g$o$;(B
  4670.                  ;; $B$F!"A4It$G(B X $B$r(B 2 $B2s!"(BY $B$r(B X $B2sAv::$7$?$3$H$K$J$k!#%=!<(B
  4671.                  ;; $B%H$5$l$F$$$J$$=89gF1;N$+$i=89g$r:n$k0J>e(B ($B8uJd$O%=!<%H$7$F(B
  4672.                  ;; $B$O$J$i$J$$(B) $B!"C`<!Av::$K$J$k$N$G$3$l$O;_$`$rF@$J$$$+(B...$B!#(B
  4673.                  (nconc x y)
  4674.                x )))))
  4675.  
  4676. (defun skk-search-kakutei-jisyo-file (file limit &optional nomsg)
  4677.   ;; $B<-=q%U%!%$%k$rC5$7!"8uJd$r%j%9%H$GJV$9!#(B
  4678.   ;; $B8uJd$r8+$D$1$?>l9g$O!"Bg0hJQ?t(B skk-kakutei-flag $B$K(B non-nil $B$rBeF~$9$k!#(B
  4679.   ;; $B8uJd$,8+$D$+$i$J$+$C$?>l9g$O!"(Bnil $B$rJV$9!#(B
  4680.   (setq skk-kakutei-flag (skk-search-jisyo-file file limit nomsg)) )
  4681.  
  4682. ;;;###skk-autoload
  4683. (defun skk-update-jisyo (word &optional purge)
  4684.   ;; WORD $B$,<!$NJQ49;~$K:G=i$N8uJd$K$J$k$h$&$K!"%W%i%$%Y!<%H<-=q$r99?7$9$k!#(B
  4685.   ;; PURGE $B$,(B non-nil $B$G(B WORD $B$,6&M-<-=q$K$"$k%(%s%H%j$J$i(B skk-ignore-dic-word
  4686.   ;; $B4X?t$G%/%)!<%H$7$?%(%s%H%j$r%W%i%$%Y!<%H<-=q$K:n$j!"<!$NJQ49$+$i=PNO$7$J(B
  4687.   ;; $B$$$h$&$K$9$k!#(B
  4688.   ;; WORD $B$,6&M-<-=q$K$J$1$l$P!"%W%i%$%Y!<%H<-=q$N<-=q%(%s%H%j$+$i:o=|$9$k!#(B
  4689.   ;;
  4690.   ;; SKK 9.x $B$h$j!"%W%i%$%Y!<%H<-=q$N%(%s%H%j$NA^F~$NJ}K!$rJQ99$7$?(B (9.3 $B$N$_(B
  4691.   ;; $B$ONc30(B)$B!#(B
  4692.   ;;
  4693.   ;; $B!ZJQ99A0![(B
  4694.   ;;         ;; okuri-ari entries.
  4695.   ;;  $B8+%-(B   $B$o$k(Bk /$B0-(B/[$B$+(B/$B0-(B/]/[$B$/(B/$B0-(B/]/
  4696.   ;;  $B=P!<(B   $B$o$k(Bi /$B0-(B/[$B$$(B/$B0-(B/]/
  4697.   ;;  $B$7$K(B   $B$o$?(Bs /$BEO(B/[$B$5(B/$BEO(B/]/[$B$;(B/$BEO(B/]/
  4698.   ;;  $B8l9_(B   $B$o$9(Br /$BK:(B/[$B$l(B/$BK:(B/]/
  4699.   ;;  $B$r=g(B   $B$o$+(Bt /$BJ,(B/$BH=(B/[$B$C$?(B/$BJ,(B/$BH=(B/]/[$B$C$F(B/$BJ,(B/]/
  4700.   ;;   $B"-(B     .....
  4701.   ;;         $B$"(Bi /$B9g(B/[$B$$(B/$B9g(B/]/
  4702.   ;;         ;; okuri-nasi entries.
  4703.   ;;  $BJQ$G(B   $B$8$g$&$?$$(B /$B>uBV(B/
  4704.   ;;  $B49>:(B   $B$=$&$K$e$&(B /$BA^F~(B/
  4705.   ;;  $B=g=g(B   $B$+$J(B /$B2>L>(B/
  4706.   ;;   $B"-(B    ...
  4707.   ;;         ...
  4708.   ;;
  4709.   ;; $B!ZJQ998e![(B
  4710.   ;;         ;; okuri-ari entries.
  4711.   ;;  $BJQ$G(B   $B$G(Bt /$B=P(B/[$B$F(B/$B=P(B/]/[$B$?(B/$B=P(B/]/
  4712.   ;;  $B49>:(B   $B$D(Bi /$BIU(B/[$B$$(B/$BIU(B/]/
  4713.   ;;  $B=g=g(B   $B$1(Bs /$B>C(B/[$B$9(B/$B>C(B/]/[$B$7(B/$B>C(B/]/[$B$;(B/$B>C(B/]/[$B$5(B/$B>C(B/]/
  4714.   ;;   $B"-(B    $B$+$((Bs /$BJV(B/[$B$7(B/$BJV(B/]/[$B$9(B/$BJV(B/]/[$B$5(B/$BJV(B/]/[$B$;(B/$BJV(B/]/
  4715.   ;;         ...
  4716.   ;;         ...
  4717.   ;;         $B$J$,(Bs /$BD9(B/$BN.(B/[$B$7(B/$BN.(B/]/[$B$5(B/$BD9(B/]/[$B$=(B/$BN.(B/]/
  4718.   ;;         ;; okuri-nasi entries.
  4719.   ;;  $BJQ$G(B   $B$8$g$&$?$$(B /$B>uBV(B/
  4720.   ;;  $B49>:(B   $B$=$&$K$e$&(B /$BA^F~(B/
  4721.   ;;  $B=g=g(B   $B$+$J(B /$B2>L>(B/
  4722.   ;;   $B"-(B    ...
  4723.   ;;         ...
  4724.   ;;
  4725.   ;; skk-auto-okuri-process $B$,(B non-nil $B$N$H$-$K!"(B(j-okuri-search $B2~$a(B)
  4726.   ;; skk-okuri-search $B$O8+=P$78l$ND9$$=g$K8uJd$rJV$9I,MW$,$"$k!#(B
  4727.   ;; SKK 8.6 $B$^$G$O!"(Bskk-okuri-search $B$,(B j-okuri-ari-min $B$+$i(B j-okuri-ari-max
  4728.   ;; $B$^$G$r=g$KC5$7!"8+$D$1$?$b$N=g$K8uJd$rJV$9$?$a$K%W%i%$%Y!<%H<-=q$,8+=P$7(B
  4729.   ;; $B8l$r%-!<$H$7$F9_=g$K%=!<%H$5$l$F$$$kI,MW$,$"$C$?!#(B
  4730.   ;; SKK 9.x $B$G$O!"(Bskk-okuri-search $B$,!"8+IU$1$?8uJd$r8+=P$78l$r%-!<$H$7$F>:=g(B
  4731.   ;; $B$K%=!<%H$7$FJV$9$?$a!"%W%i%$%Y!<%H<-=q$N%=!<%H$OI,MW$G$J$$!#$h$C$F!":G8e(B
  4732.   ;; $B$KJQ49$7$?$b$N$r(B (j-okuri-ari-min $B2~$a(B) skk-okuri-ari-min $B$N0LCV$KA^F~$9(B
  4733.   ;; $B$k!#(B
  4734.   ;;
  4735.   (let ((jisyo-buffer (skk-get-jisyo-buffer skk-jisyo 'nomsg))
  4736.     (midasi 
  4737.      (if skk-use-numeric-conversion
  4738.          (skk-compute-numeric-henkan-key skk-henkan-key)
  4739.        skk-henkan-key ))
  4740.     (last skk-last-henkan-result)
  4741.     (last-point skk-last-henkan-point)
  4742.     (here (point)) )
  4743.     (if jisyo-buffer
  4744.         (let ((inhibit-quit t) buffer-read-only old-entry okurigana)
  4745.           (if skk-auto-okuri-process
  4746.               (setq word (skk-remove-common word)) )
  4747.           (setq okurigana (or skk-henkan-okurigana skk-okuri-char))
  4748.                 ;; midasi skk-henkan-key )
  4749.           (with-current-buffer jisyo-buffer
  4750.             ;; $B4{B8%(%s%H%j$r8!:w8e>C5n$9$k!#A^F~$9$Y$-%(%s%H%j$,(B entry1 $B$K(B 1
  4751.             ;; $B$D$7$+$J$/!"(Bword $B$HF1$8J8;z$G$"$C$F$b!"$$$C$?$s>C$7$F$=$N%(%s%H(B
  4752.             ;; $B%j$r(B min $B%]%$%s%H$K0\F0$5$;$J$1$l$P$J$i$J$$(B ($BFI$_$NJd40$r9T$&$H(B
  4753.             ;; $B$-$O!"(Bmin $B%]%$%s%H$+$i8+=P$7$rC5$9$?$a!"?7$7$$8+=P$7$[$I!"(Bmin
  4754.             ;; $B%]%$%s%H$K6a$$$H$3$m$K$J$1$l$P$J$i$J$$(B)$B!#(B
  4755.             (setq skk-henkan-key midasi
  4756.                   old-entry (skk-search-jisyo-file-1 okurigana 0 'delete) )
  4757.             (skk-update-jisyo-1 okurigana word old-entry purge)
  4758.         (if skk-use-relation
  4759.         (progn
  4760.           (if (not (and
  4761.                 last
  4762.                 (markerp last-point)
  4763.                 (< last-point here)
  4764.                 (< (- here last-point) skk-relation-length) ))
  4765.               (setq last nil) )
  4766.           (skk-update-relation
  4767.            midasi okurigana word last purge) ))
  4768.         (if skk-debug (message "%S %S %S" last last-point here))
  4769.             ;;(if (featurep 'skk-attr)
  4770.             ;;    (progn
  4771.             ;;      (and skk-attr-default-update-function
  4772.             ;;           (funcall skk-attr-default-update-function midasi
  4773.             ;;                    okurigana word purge ))
  4774.             ;;      (and skk-attr-update-function
  4775.             ;;           (funcall skk-attr-update-function midasi okurigana
  4776.             ;;                    word purge ))))
  4777.             ;; auto save.
  4778.             (if skk-jisyo-save-count
  4779.                 (if (> skk-jisyo-save-count skk-update-jisyo-count)
  4780.                     (setq skk-update-jisyo-count (1+ skk-update-jisyo-count))
  4781.                   (setq skk-update-jisyo-count 0)
  4782.                   (skk-save-jisyo 'quiet) ))
  4783.             ;; $B<-=q%P%C%U%!$r%*!<%W%s$7$?$H$-$K(B auto-save-mode $B$r%*%U$K$7$F$*(B
  4784.             ;; $B$1$PKhEY2<5-$N$h$&$JA`:n$r$7$J$/$F:Q$`!#(B
  4785.             ;;
  4786.             ;; $B$3$&$7$F$*$1$P!"<-=q%P%C%U%!$O%*!<%H%;!<%V$5$l$J$/$F:Q$`!#(B
  4787.             ;;(set-buffer-modified-p nil)
  4788.             )))))
  4789.  
  4790. (defun skk-update-jisyo-1 (okurigana word old-entry-list purge)
  4791.   ;; $B4{B8%(%s%H%j$+$i7W;;$7$?(B entry[1-4] $B$NCM$H!":#2s$NJQ49$N7k2L(B word $B$H$r%^!<(B
  4792.   ;; $B%8$7$F!"?7$?$J%(%s%H%j$r7W;;$7!"A^F~$9$k!#(B
  4793.   (let ((entry1 (car old-entry-list)) (entry2 (nth 1 old-entry-list))
  4794.         (entry3 (nth 2 old-entry-list)) (entry4 (nth 3 old-entry-list)) )
  4795.     (if (not purge)
  4796.         ;; entry1 $B$N@hF,$N%(%s%H%j$r(B word $B$K$9$k!#(B
  4797.         (setq entry1 (cons word (delete word entry1)))
  4798.       ;; $BAw$j$J$7!"$b$7$/$O(B skk-henkan-okuri-strictly $B$H(B
  4799.       ;; skk-henkan-strict-okuri-precedence $B$,(B nil $B$N>l9g!#(B
  4800.       (if (or (not okurigana) (not (or skk-henkan-okuri-strictly
  4801.                        skk-henkan-strict-okuri-precedence )))
  4802.           ;; entry1 $B$r(B purge$B!#6&MQ<-=q$K$"$k%(%s%H%j$@$C$?$i!"(B
  4803.           ;; skk-ignore-dic-word $B$G%/%)!<%H$7$F<!$NJQ49$+$i=PNO$7$J$$$h$&$K$9(B
  4804.           ;; $B$k!#6&MQ<-=q$K$J$$J8;zNs$O(B word $B$r>C$9!#(B
  4805.           (if (skk-public-jisyo-contains-p okurigana word)
  4806.               (setq entry1 (skk-compose-ignore-entry entry1 word))
  4807.             (setq entry1 (delete word entry1)) )
  4808.         ;; $BAw$j$"$j$G!"$+$D(B skk-henkan-okuri-strictly $B$+(B
  4809.     ;; skk-henkan-strict-okuri-precedence $B$,(B non-nil $B$N>l9g$G!"$+$D(B
  4810.         ;; $B$3$N(B word $B$H%Z%"$K$J$kAw$j2>L>$,(B okurigana $B$7$+$J$$$H$-!#(B
  4811.         (if (and okurigana (or skk-henkan-okuri-strictly
  4812.                    skk-henkan-strict-okuri-precedence )
  4813.                  (null (member word entry2)) (null (member word entry4)) )
  4814.             (setq entry1 (delete word entry1))
  4815.           ;; $B$=$NB>$N>l9g$O2?$b$7$J$$!#(B
  4816.           )))
  4817.     (if (null entry1)
  4818.         ;; entry1 $B$,(B null $B$G$"$l$P!"$b$&2?$b$9$k$3$H$O$J$$!#(B
  4819.         nil
  4820.       (goto-char (if okurigana skk-okuri-ari-min skk-okuri-nasi-min))
  4821.       (insert "\n" skk-henkan-key " /")
  4822.       ;; entry1 -- $BA4%(%s%H%j(B ($BAw$j$J$7$N>l9g(B) or $B4A;zItJ,$NA4%(%s%H%j(B ($BAw$j$"(B
  4823.       ;; $B$j$N>l9g(B)
  4824.       (insert (mapconcat 'skk-quote-char entry1 "/") "/")
  4825.       (if (not okurigana)
  4826.           nil
  4827.         ;; entry2 $B0J9_$N%(%s%H%j$r=hM}$9$k$N$O!"Aw$j$"$j$N>l9g$N$_!#(B
  4828.         ;; $B@h$KA^F~$9$Y$-%(%s%H%j$r7W;;!"D4@0$9$k!#(B
  4829.         (if entry3
  4830.             (if (not purge)
  4831.                 (setq entry3 (cons word (delete word entry3)))
  4832.               (setq entry3 (delete word entry3))
  4833.               (if (null entry3)
  4834.                   ;; entry3 $B$H$7$FA^F~$9$k$b$N$,A4$/$J$1$l$P!"(B"/[$B$/(B/]/" $B$N$h(B
  4835.                   ;; $B$&$JAw$j2>L>$N$_$N%(%s%H%j$r:n$i$J$$$h$&$K$9$k(B ($BI,MW$G(B
  4836.                   ;; $B$"$l$P!"(Bentry2 $B$N:G8eJ}$H(B) entry4 $B$N@hF,$N%(%s%H%j(B "]"
  4837.                   ;; $B$r:o=|!#(B
  4838.                   (let ((last2 (nthcdr (- (length entry2) 2) entry2)))
  4839.                     ;; entry2 $B$N:G8eJ}$O>o$K(B "[$BAw$j2>L>(B" $B$H$O8B$i$J$$!#(B
  4840.                     (if (string= (nth 1 last2) (concat "[" okurigana))
  4841.                         (setcdr last2 nil) )
  4842.                     ;; entry4 $B$N@hF,$O>o$K(B "]"$B!#(B
  4843.                     (setq entry4 (cdr entry4)) )))
  4844.           ;; entry3 $B$,(B null $B$G$"$l$P(B
  4845.           (if (or skk-process-okuri-early purge)
  4846.               ;; skk-process-okuri-early $B$,(B non-nil $B$J$iAw$j2>L>$,J,$i$J$$$N$G(B
  4847.               ;; $B2?$b$7$J$$!#(B-- $B:#2s;HMQ$7$?Aw$j2>L>$,$o$+$i$J$$$^$^JQ49$7$F$$(B
  4848.               ;; $B$k$N$G!"A4$F$N%(%s%H%j$,(B entry2 $B$KF~$C$F$$$k(B -- entry3,
  4849.               ;; entry4 $B$O(B null$B!#(B
  4850.               ;; entry3 $B$H$7$FA^F~$9$k$b$N$,A4$/$J$1$l$P!"2?$b$7$J$$(B -- entry3
  4851.               ;; $B$,(B purge $BA0$+$i(B null $B$J$i!"(Bentry2 $B$NKvHx$O(B "[" $B$G$J$$$7!"(B
  4852.               ;; entry4 $B$O(B null $B$@$+$i(B entry[234] $B$NA`:n$OITMW!#(B
  4853.               nil
  4854.             (setq entry2 (nconc entry2 (list (concat "[" okurigana)))
  4855.                   entry3 (list word)
  4856.                   ;; purge $BA0$+$i(B entry3 $B$,(B null $B$@$C$?$N$@$+$i(B entry4 $B$b(B null$B!#(B
  4857.                   entry4 (list "]") ))))
  4858.       (if entry2
  4859.           ;; entry2 -- $B:#2s;HMQ$7$J$+$C$?Aw$j2>L>$r;H$&4A;z$N8uJd72(B + "[" + $B:#(B
  4860.           ;; $B2s;HMQ$7$?Aw$j2>L>(B ($BAw$j2>L>$N$_!#$=$NAw$j2>L>$r;HMQ$9$k4A;z$N8u(B
  4861.           ;; $BJd72$O!"(Bentry3 $B$K4^$^$l$k(B)$B!#(B
  4862.           (progn
  4863.             (insert (mapconcat 'skk-quote-char entry2 "/" ) "/")
  4864.             ;; entry2 $B$,(B null $B$J$i(B entry3 $B$b(B null$B!#(B
  4865.             (if entry3
  4866.                 ;; entry3 -- $B:#2s;HMQ$7$?Aw$j2>L>$r;H$&A44A;z%(%s%H%j(B
  4867.                 (insert (mapconcat 'skk-quote-char entry3 "/") "/") )
  4868.             ;; purge $B$G(B entry3 $B$,(B null $B$K$J$C$?>l9g$O(B entry4 $B$,;D$C$F$$$k$H$-(B
  4869.             ;; $B$,$"$k!#(B
  4870.             (if entry4
  4871.                 ;; entry4 -- "]" + $BB>$NAw$j2>L>$r;H$&A44A;z%(%s%H%j(B (entry2 $B$N(B
  4872.                 ;; $B;D$j(B)$B!#(B
  4873.                 (insert (mapconcat 'skk-quote-char entry4 "/") "/") ))))))
  4874.  
  4875. (defun skk-quote-char (word)
  4876.   ;; $B<-=q$N@)8B$+$i<-=q%(%s%H%jFb$K4^$a$F$O$J$i$J$$J8;z$,(B WORD $B$NCf$K$"$l$P!"(B
  4877.   ;; $BI>2A$7$?$H$-$K$=$NJ8;z$H$J$k$h$&$J(B Lisp $B%3!<%I$rJV$9!#(B
  4878.   (save-match-data
  4879.     (if (and word
  4880.              (string-match "[/\n\r\"]" word)
  4881.              ;; we should not quote WORD if it is a symbolic expression
  4882.              (not (skk-lisp-prog-p word)) )
  4883.         (concat "(concat \""
  4884.                 (mapconcat (function (lambda (c)
  4885.                                        (cond ((eq c ?/) ; ?/
  4886.                                               "\\057" )
  4887.                                              ((eq c ?\n) ; ?\n
  4888.                                               "\\n" )
  4889.                                              ((eq c ?\r) ; ?\r
  4890.                                               "\\r" )
  4891.                                              ((eq c ?\") ; ?\"
  4892.                                               "\\\"" )
  4893.                                              ((eq c ?\\) ; ?\\
  4894.                                               "\\\\" )
  4895.                                              (t (char-to-string c)))))
  4896.                            ;; $BJ8;zNs$rBP1~$9$k(B char $B$N%j%9%H$KJ,2r$9$k!#(B
  4897.                            (append word nil) "")
  4898.                 "\")")
  4899.       word )))
  4900.  
  4901. (defun skk-lisp-prog-p (word)
  4902.   ;; word $B$,(B Lisp $B%W%m%0%i%`$G$"$l$P!"(Bt $B$rJV$9!#(B
  4903.   (let ((l (length word)))
  4904.     (and (> l 2)
  4905.          (eq (aref word 0) ?\() ; ?\(
  4906.          (< (aref word 1) 128)
  4907.          (eq (aref word (1- l)) ?\)) ))) ; ?\)
  4908.  
  4909. (defun skk-public-jisyo-contains-p (okurigana word)
  4910.   ;; $B6&M-<-=q$,(B MIDASHI $B5Z$S$=$l$KBP1~$9$k(B WORDS $B%(%s%H%j$r;}$C$F$$$l$P!"(B
  4911.   ;; non-nil $B$rJV$9!#%W%i%$%Y!<%H<-=q$N%P%C%U%!$G%3!<%k$5$l$k!#(B
  4912.   (let (fn skk-henkan-okuri-strictly skk-henkan-strict-okuri-precedence)
  4913.     (if okurigana
  4914.         (setq skk-henkan-okurigana okurigana) )
  4915.     (if (and (not (featurep 'skk-server))
  4916.              (or (and (boundp 'skk-server-host) skk-server-host)
  4917.                  (and (boundp 'skk-servers-list) skk-servers-list)
  4918.                  (getenv "SKKSERVER")
  4919.                  (getenv "SKKSERV") ))
  4920.         (require 'skk-server) )
  4921.     (if (and (featurep 'skk-server)
  4922.              (or (and skk-server-host skk-server-prog)
  4923.                  skk-servers-list ))
  4924.         (setq fn (assq 'skk-search-server skk-search-prog-list)) )
  4925.     ;; skk-search-server $B$+$i;O$^$k%j%9%H$,$J$1$l$P!"$H$K$+$/Bg$-$$<-=q$r0z?t(B
  4926.     ;; $B$K$7$F$$$k(B skk-search-jisyo-file $B%W%m%0%i%`$rC5$9!#(B
  4927.     (if (and (not fn) (or skk-aux-large-jisyo skk-large-jisyo))
  4928.         (let ((spl skk-search-prog-list)
  4929.               cell )
  4930.           (while (setq cell (car spl))
  4931.             (if (and (eq (car cell) 'skk-search-jisyo-file)
  4932.                      (member (nth 1 cell)
  4933.                              '(skk-aux-large-jisyo skk-large-jisyo) ))
  4934.                 (setq fn cell
  4935.                       spl nil )
  4936.               (setq spl (cdr spl)) ))))
  4937.     (and fn (member word (eval fn))) ))
  4938.  
  4939. (defun skk-compose-ignore-entry (entry &optional add)
  4940.   ;; ENTRY $B$NCf$K(B skk-ignore-dic-word $B4X?t$G%/%)!<%H$7$?%(%s%H%j$,$"$l(B
  4941.   ;; $B$P!"0l$D$N%(%s%H%j$K$^$H$a$k!#(B
  4942.   ;; $B%*%W%7%g%J%k0z?t$N(B ADD $B$,;XDj$5$l$F$$$?$i!"(BADD $B$r4^$a$?(B
  4943.   ;; skk-ignore-dic-word $B%(%s%H%j$r:n$k!#(B
  4944.   ;; $B?7$7$$(B skk-ignore-dic-word $B%(%s%H%j$r(B car $B$K!"$=$l0J30$N%(%s%H%j(B cdr $B$K$7(B
  4945.   ;; $B$?%j%9%H$rJV$9!#(B
  4946.   (let (l arg e)
  4947.     (if add (setq entry (delete add entry)))
  4948.     (setq l entry)
  4949.     (save-match-data
  4950.       (while l
  4951.         (setq e (car l)
  4952.               l (cdr l) )
  4953.         (if (string-match "(skk-ignore-dic-word +\\([^\)]+\\))" e)
  4954.             (setq arg (concat arg
  4955.                               (substring e (1+ (match-beginning 1))
  4956.                                          (1- (match-end 1)) )
  4957.                               "\" \"" )
  4958.                   entry (delq e entry) )))
  4959.       (if add
  4960.           (setq arg (if arg (concat arg add) add))
  4961.         ;; $BKvHx$N(B " \"" $B$r@Z$jMn$H$9!#(B
  4962.         (setq arg (substring arg 0 -2)) )
  4963.       (cons (concat "(skk-ignore-dic-word \"" arg "\")") entry) )))
  4964.  
  4965. (defun skk-katakana-region (start end &optional vcontract)
  4966.   "$B%j!<%8%g%s$N$R$i$,$J$r%+%?%+%J$KJQ49$9$k!#(B
  4967. $B%*%W%7%g%J%k0z?t$N(B VCONTRACT $B$,(B non-nil $B$G$"$l$P!"(B\"$B$&!+(B\" $B$r(B \"$B%t(B\" $B$KJQ49$9(B
  4968. $B$k!#(B
  4969. $B0z?t$N(B START $B$H(B END $B$O?t;z$G$b%^!<%+!<$G$bNI$$!#(B"
  4970.   (interactive "*r\nP")
  4971.   (let ((diff (if skk-mule (- ?$B%"(B ?$B$"(B)))
  4972.         ch )
  4973.     (skk-save-point
  4974.       (save-match-data
  4975.         ;;(if (and skk-henkan-active skk-use-face) (skk-henkan-face-off))
  4976.         (goto-char start)
  4977.         (while (re-search-forward  "[$B$!(B-$B$s(B]" end 'noerror)
  4978.           (setq ch (preceding-char))
  4979.           ;; firstly insert a new char, secondly delete an old char to save
  4980.           ;; the cursor position.
  4981.           (if skk-mule
  4982.               (progn
  4983.                 (backward-char 1)
  4984.                 (cancel-undo-boundary)
  4985.                 (insert (+ ch diff)) )
  4986.             (backward-char 2)
  4987.             (cancel-undo-boundary)
  4988.             (insert ?\245 ch) )
  4989.           (cancel-undo-boundary)
  4990.           (delete-region (+ (match-beginning 0) skk-kanji-len)
  4991.                          (+ (match-end 0) skk-kanji-len) ))
  4992.         (if vcontract
  4993.             (progn
  4994.               (goto-char start)
  4995.               (while (re-search-forward  "$B%&!+(B" end 'noerror)
  4996.                 (if skk-mule
  4997.                     (backward-char 2)
  4998.                   (backward-char 3) )
  4999.                 (cancel-undo-boundary)
  5000.                 (insert "$B%t(B")
  5001.                 (cancel-undo-boundary)
  5002.                 (delete-region (+ (match-beginning 0) skk-kanji-len)
  5003.                                (+ (match-end 0) skk-kanji-len) ))))
  5004.         ;;(if (and skk-henkan-active skk-use-face) (skk-henkan-face-on))
  5005.         (skk-set-cursor-properly)
  5006.         ))))
  5007.  
  5008. (defun skk-hiragana-region (start end &optional vexpand)
  5009.   "$B%j!<%8%g%s$N%+%?%+%J$r$R$i$,$J$KJQ49$9$k!#(B
  5010. $B%*%W%7%g%J%k0z?t$N(B VEXPAND $B$,(B non-nil $B$G$"$l$P!"(B\"$B%t(B\" $B$r(B \"$B$&!+(B\" $B$KJQ49$9$k!#(B
  5011. $B0z?t$N(B START $B$H(B END $B$O?t;z$G$b%^!<%+!<$G$bNI$$!#(B
  5012. \"$B%u(B\" $B$H(B \"$B%v(B\" $B$OJQ99$5$l$J$$!#$3$N(B 2 $B$D$NJ8;z$OBP1~$9$k$R$i$,$J$,$J$$$N$G!"%+(B
  5013. $B%?%+%J$H$7$F$O07$o$l$J$$!#(B"
  5014.   (interactive "*r\nP")
  5015.   (let ((diff (if skk-mule (- ?$B%"(B ?$B$"(B)))
  5016.         ch )
  5017.     (skk-save-point
  5018.       (save-match-data
  5019.         ;;(if (and skk-henkan-active skk-use-face) (skk-henkan-face-off))
  5020.         (goto-char start)
  5021.         (while (re-search-forward  "[$B%!(B-$B%s(B]" end 'noerror)
  5022.           (setq ch (preceding-char))
  5023.           ;; firstly insert a new char, secondly delete an old char to save
  5024.           ;; the cursor position.
  5025.           (if skk-mule
  5026.               (progn
  5027.                 (backward-char 1)
  5028.                 (cancel-undo-boundary)
  5029.                 (insert (- ch diff)) )
  5030.             (backward-char 2)
  5031.             (cancel-undo-boundary)
  5032.             (insert ?\244 ch) )
  5033.           (cancel-undo-boundary)
  5034.           (delete-region (+ (match-beginning 0) skk-kanji-len)
  5035.                          (+ (match-end 0) skk-kanji-len) ))
  5036.         (if vexpand
  5037.             (progn
  5038.               (goto-char start)
  5039.               (while (re-search-forward "$B%t(B" end 'noerror)
  5040.                 (backward-char 1)
  5041.                 (cancel-undo-boundary)
  5042.                 (insert "$B$&!+(B")
  5043.                 (cancel-undo-boundary)
  5044.                 (delete-region (+ (match-beginning 0) (* skk-kanji-len 2))
  5045.                                (+ (match-end 0) (* skk-kanji-len 2)) ))))
  5046.         ;;(if (and skk-henkan-active skk-use-face) (skk-henkan-face-on))
  5047.         (skk-set-cursor-properly)
  5048.         ))))
  5049.  
  5050. (defun skk-zenkaku-region (start end)
  5051.   "$B%j!<%8%g%s$N(B ascii $BJ8;z$rBP1~$9$kA43QJ8;z$KJQ49$9$k!#(B"
  5052.   (interactive "*r")
  5053.   (skk-save-point
  5054.     (save-match-data
  5055.       ;;(if (and skk-henkan-active skk-use-face) (skk-henkan-face-off))
  5056.       (goto-char end)
  5057.       (while (re-search-backward "[ -~]" start 'noerror)
  5058.         (cancel-undo-boundary)
  5059.         ;; firstly insert a new char, secondly delete an old char to save
  5060.         ;; the cursor position.
  5061.         (insert (aref skk-default-zenkaku-vector (following-char)))
  5062.         (cancel-undo-boundary)
  5063.         (delete-region (+ (match-beginning 0) skk-kanji-len)
  5064.                        (+ (match-end 0) skk-kanji-len) ))
  5065.       ;;(if (and skk-henkan-active skk-use-face) (skk-henkan-face-on))
  5066.       (skk-set-cursor-properly)
  5067.       )))
  5068.  
  5069. (defun skk-ascii-region (start end)
  5070.   ;; $B%j!<%8%g%s$NA43Q1Q?t;z$rBP1~$9$k(B ascii $BJ8;z$KJQ49$9$k!#(B
  5071.   ;; egg.el 3.09 $B$N(B hankaku-region $B$r;29M$K$7$?!#(B
  5072.   (interactive "*r")
  5073.   (skk-save-point
  5074.     (save-match-data
  5075.       (let (val)
  5076.         ;;(if (and skk-henkan-active skk-use-face) (skk-henkan-face-off))
  5077.         (goto-char end)
  5078.         (while (re-search-backward "\\cS\\|\\cA" start 'noerror)
  5079.           (setq val (skk-jisx0208-to-ascii (char-to-string (following-char))))
  5080.           (if val
  5081.               (progn
  5082.                 (insert val)
  5083.                 (delete-region (+ (match-beginning 0) 1)
  5084.                                (+ (match-end 0) 1) ))))
  5085.         ;;(if (and skk-henkan-active skk-use-face) (skk-henkan-face-on))
  5086.         (skk-set-cursor-properly)
  5087.         ))))
  5088.  
  5089. (defun skk-katakana-henkan (arg)
  5090.   "$B"&%b!<%I$G$"$l$P!"%j!<%8%g%s$N$R$i$,$J$r%+%?%+%J$KJQ49$9$k!#(B
  5091. $B"'%b!<%I$G$O2?$b$7$J$$!#(B
  5092. $B$=$NB>$N%b!<%I$G$O!"%*%j%8%J%k$N%-!<3d$jIU$1$G%P%$%s%I$5$l$F$$$k%3%^%s%I$r<B9T(B
  5093. $B$9$k!#(B"
  5094.   (interactive "*P")
  5095.   (if skk-henkan-on
  5096.       (if (not skk-henkan-active)
  5097.           (skk-*-henkan-1 'skk-katakana-region skk-henkan-start-point
  5098.                           skk-henkan-end-point 'vcontract ))
  5099.     (skk-emulate-original-map arg) ))
  5100.  
  5101. (defun skk-hiragana-henkan (arg)
  5102.   "$B"&%b!<%I$G$"$l$P!"%j!<%8%g%s$N%+%?%+%J$r$R$i$,$J$KJQ49$9$k!#(B
  5103. $B"'%b!<%I$G$O2?$b$7$J$$!#(B
  5104. $B$=$NB>$N%b!<%I$G$O!"%*%j%8%J%k$N%-!<3d$jIU$1$G%P%$%s%I$5$l$F$$$k%3%^%s%I$r<B9T(B
  5105. $B$9$k!#(B"
  5106.   (interactive "*P")
  5107.   (if skk-henkan-on
  5108.       (if (not skk-henkan-active)
  5109.           (skk-*-henkan-1 'skk-hiragana-region skk-henkan-start-point
  5110.                           skk-henkan-end-point 'vexpand ))
  5111.     (skk-emulate-original-map arg) ))
  5112.  
  5113. (defun skk-zenkaku-henkan (arg)
  5114.   "$B"&%b!<%I$G$"$l$P!"(Bascii $BJ8;z$rBP1~$9$kA43QJ8;z$KJQ49$9$k!#(B
  5115. $B"'%b!<%I$G$O2?$b$7$J$$!#(B
  5116. $B$=$NB>$N%b!<%I$G$O!"%*%j%8%J%k$N%-!<3d$jIU$1$G%P%$%s%I$5$l$F$$$k%3%^%s%I$r<B9T(B
  5117. $B$9$k!#(B"
  5118.   (interactive "*P")
  5119.   (if skk-henkan-on
  5120.       (if (not skk-henkan-active)
  5121.           (skk-*-henkan-1 'skk-zenkaku-region skk-henkan-start-point
  5122.                           skk-henkan-end-point ))
  5123.     (skk-emulate-original-map arg) ))
  5124.  
  5125. (defun skk-ascii-henkan (arg)
  5126.   "$B"&%b!<%I$G$"$l$P!"(Bascii $BJ8;z$rBP1~$9$kA43QJ8;z$KJQ49$9$k!#(B
  5127. $B"'%b!<%I$G$O2?$b$7$J$$!#(B
  5128. $B$=$NB>$N%b!<%I$G$O!"%*%j%8%J%k$N%-!<3d$jIU$1$G%P%$%s%I$5$l$F$$$k%3%^%s%I$r<B9T(B
  5129. $B$9$k!#(B"
  5130.   (interactive "*P")
  5131.   (if skk-henkan-on
  5132.       (if (not skk-henkan-active)
  5133.           (skk-*-henkan-1 'skk-ascii-region skk-henkan-start-point
  5134.                           skk-henkan-end-point ))
  5135.     (skk-emulate-original-map arg) ))
  5136.  
  5137. (defun skk-*-henkan-1 (func &rest args)
  5138.   ;; $BJQ492DG=$+$I$&$+$N%A%'%C%/$r$7$?8e$K(B ARGS $B$r0z?t$H$7$F(B FUNC $B$rE,MQ$7!"(B
  5139.   ;; skk-henkan-start-point $B$H(B skk-henkan-end-point $B$N4V$NJ8;zNs$rJQ49$9$k!#(B
  5140.   (let ((pos (point)))
  5141.     (cond ((not (string= skk-prefix ""))
  5142.            (skk-error "$B%U%#%C%/%9$5$l$F$$$J$$(B skk-prefix $B$,$"$j$^$9(B"
  5143.                       "Have unfixed skk-prefix" ))
  5144.           ((< pos skk-henkan-start-point)
  5145.            (skk-error "$B%+!<%=%k$,JQ493+;OCOE@$h$jA0$K$"$j$^$9(B"
  5146.                       "Henkan end point must be after henkan start point" ))
  5147.           ((and (not skk-allow-spaces-newlines-and-tabs)
  5148.                 (skk-save-point (beginning-of-line)
  5149.                                 (> (point) skk-henkan-start-point) ))
  5150.            (skk-error "$BJQ49%-!<$K2~9T$,4^$^$l$F$$$^$9(B"
  5151.                       "Henkan key may not contain a new line character" )))
  5152.     (skk-set-marker skk-henkan-end-point pos)
  5153.     (apply func args)
  5154.     (skk-kakutei) ))
  5155.  
  5156. ;;;###skk-autoload
  5157. (defun skk-jisx0208-to-ascii (string)
  5158.   (let ((char
  5159.          (cond (skk-mule3
  5160.                 (require 'language/japan-util)
  5161.                 (get-char-code-property (string-to-char string) 'ascii) )
  5162.                (skk-mule
  5163.                 (let* ((ch (string-to-char string))
  5164.                        (ch1 (char-component ch 1)) )
  5165.                   (cond ((eq 161 ch1)   ; ?\241
  5166.                          (cdr (assq (char-component ch 2) skk-hankaku-alist)) )
  5167.                         ((eq 163 ch1)   ; ?\243
  5168.                          (- (char-component ch 2) 128) ; ?\200
  5169.                          ))))
  5170.                (t (- (aref string (1- skk-kanji-len)) 128)) )))
  5171.     (if char (char-to-string char)) ))
  5172.                              
  5173. ;;;###skk-autoload
  5174. (defun skk-middle-list (org offset inserted)
  5175.   ;; ORG := '(A B C), INSERTED := '(X Y), OFFSET := 1
  5176.   ;; -> '(A B X Y C)
  5177.   (let (tmp tail)
  5178.     (if (>= 0 offset)
  5179.         (error "Cannot insert!") )
  5180.     (setq tmp (nthcdr (1- offset) org)
  5181.           tail (cdr tmp) )
  5182.     (setcdr tmp nil) ;cut off
  5183.     (setcdr tmp (if tail (nconc inserted tail) inserted))
  5184.     org ))
  5185.  
  5186. ;;(defun skk-chomp (nth list)
  5187. ;;  (let ((l (nthcdr (1- nth) list)))
  5188. ;;    (setcdr l nil)
  5189. ;;    list ))
  5190.  
  5191. ;;(defun skk-cutoff-list (list offset)
  5192. ;;  ;; LIST := '(A B C), OFFSET := 1
  5193. ;;  ;; -> '(A B)
  5194. ;;  (if (< 0 offset)
  5195. ;;      (setcdr (nthcdr (1- offset) list) nil) )
  5196. ;;  list )
  5197.   
  5198. (defun skk-henkan-face-on ()
  5199.   ;; skk-use-face $B$,(B non-nil $B$N>l9g!"(Bskk-henkan-start-point $B$H(B
  5200.   ;; skk-henkan-end-point $B$N4V$N(B face $BB0@-$r(B skk-henkan-face $B$NCM$KJQ99$9$k!#(B
  5201.   ;;
  5202.   ;; SKK 9.4 $B$h$j(B Text Properties $B$r;HMQ$9$k$N$r;_$a$F!"(BOverlays $B$r;HMQ$9$k$h(B
  5203.   ;; $B$&$K$7$?(B (egg.el, canna.el, wnn-egg.el $B$r;29M$K$7$?(B)$B!#(B
  5204.   ;; Overlays $B$O!"%F%-%9%H$N0lIt$G$O$J$$$N$G!"%P%C%U%!$+$iJ8;z$r@Z$j=P$7$F$b%3(B
  5205.   ;; $B%T!<$NBP>]$K$J$i$J$$$7!"%"%s%I%%;~$bL5;k$5$l$k$N$G!"JQ49$5$l$?8uJd$NI=<((B
  5206.   ;; $B$r0l;~E*$KJQ99$9$k$K$O(B Text Properties $B$h$j$b9%ET9g$G$"$k!#(B
  5207.   ;;
  5208.   ;; $BC"$7!"(BOverlays $B$O(B Text Properties $B$h$j07$$$KCm0U$9$Y$-E@$,$"$k!#(B
  5209.   ;; $B%*!<%P%l%$$NCf$N%^!<%+$rD>@\JQ99$7$F$7$^$&$H!"$[$+$N=EMW$J%G!<%?9=B$$N99(B
  5210.   ;; $B?7$,9T$o$l$:!"<:$o$l$k%*!<%P%l%$$,=P$k$3$H$K$J$j$+$M$J$$(B (Overlay $B$N(B
  5211.   ;; Buffer$B$NHO0O$rJQ99$9$k$H$-$O!"I,$:(B move-overlay $B$r;HMQ$7$J$1$l$P$J$i$J$$(B)
  5212.   ;; $B$H$$$&E@$G$"$k!#(Bskk-henkan-face-on $B$GJQ497k2L$N8uJd$K4X$9$k(B
  5213.   ;; skk-henkan-overlay $B$r?75,$K:n$C$F$+$i(B ($B$"$k$$$O4{B8$N(B Overlay $B$r3:Ev8D=j(B
  5214.   ;; $B$K0\F0$7$F$+$i(B) skk-henkan-face-off $B$G>C5n$9$k$^$G$N4V$K(B
  5215.   ;; skk-henkan-start-point $B$H(B skk-henkan-end-point $BCf$N%F%-%9%H$r:o=|$9$k$H!"(B
  5216.   ;; $B7k2LE*$K(B move-overlay $B$r;HMQ$;$:$=$l$i$N%^!<%+!<CM$r99?7$9$k$3$H$K$J$C$F(B
  5217.   ;; $B$7$^$&!#=>$$!"(Bskk-henkan-start-point $B$H(B skk-henkan-end-point $B$N4V$K$"$k%F(B
  5218.   ;; $B%-%9%H$KJQ99$r2C$($k$H$-$O!"@h$K(B skk-henkan-face-off $B$G0lC6(B
  5219.   ;; skk-henkan-overlay $B$r>C$9I,MW$,$"$k(B (<(skk-e19.el/kill-region)>)$B!#(B
  5220.   ;;
  5221.   ;;From: enami tsugutomo <enami@ba2.so-net.or.jp>
  5222.   ;;Subject: overlay (was Re: SKK-9.4.15)
  5223.   ;;Date: 23 Oct 1996 16:35:53 +0900
  5224.   ;;Message-ID: <87n2xe5e06.fsf@plants-doll.enami.ba2.so-net.or.jp>
  5225.   ;;
  5226.   ;;enami> $B4X?t(B skk-henkan-face-on $B$N(B comment $B$N(B
  5227.   ;;enami> 
  5228.   ;;enami>   ;; $BC"$7!"(BOverlays $B$O(B Text Properties $B$h$j07$$$KCm0U$9$Y$-E@$,$"$k!#(B
  5229.   ;;enami>   ;; $B%*!<%P%l%$$NCf$N%^!<%+$rD>@\JQ99$7$F$7$^$&$H!"$[$+$N=EMW$J%G!<%?9=B$$N99(B
  5230.   ;;enami>   ;; $B?7$,9T$o$l$:!"<:$o$l$k%*!<%P%l%$$,=P$k$3$H$K$J$j$+$M$J$$(B
  5231.   ;;enami> 
  5232.   ;;enami>  ($B5Z$S$=$l0J9_(B) $B$NItJ,$K4X$7$F$G$9$,(B, make-overlay $B$G0LCV$N;XDj$K;H$C(B
  5233.   ;;enami> $B$?(B marker $B$,$=$N$^$^(B overlay $B$N0lIt$H$7$F;H$o$l$k$H(B, $B8m2r$7$F$$$^$;$s(B
  5234.   ;;enami> $B$G$7$g$&$+(B?
  5235.   ;;enami> 
  5236.   ;;enami> $B<B:]$K$O(B overlay $B$N0lIt$r0Y$9(B marker $B$rD>@\0\F0$5$;$k$3$H$O$G$-$^$;$s(B
  5237.   ;;enami> $B$7(B, text $B$N:o=|DI2C$K$h$k0\F0$K$OBP=h$7$F$$$^$9$+$iLdBj$J$$$H;W$$$^$9(B.
  5238.   ;;enami> 
  5239.   ;;enami> # $B$=$&$G$J$+$C$?$i(B overlay $B$C$FL5Cc6lCc;H$$$E$i$$$b$N$K$J$C$F$7$^$$$^(B
  5240.   ;;enami> # $B$9(B.
  5241.   ;;enami> $B$($J$_(B
  5242.   (let ((inhibit-quit t)
  5243.         cbuf )
  5244.     (if (and skk-henkan-face
  5245.              (setq cbuf (current-buffer))
  5246.              (eq (marker-buffer skk-henkan-start-point) cbuf)
  5247.              (eq (marker-buffer skk-henkan-end-point) cbuf)
  5248.              (marker-position skk-henkan-start-point)
  5249.              (marker-position skk-henkan-end-point) )
  5250.         (progn
  5251.           (or skk-henkan-overlay
  5252.               (setq skk-henkan-overlay (skk-make-overlay skk-henkan-start-point
  5253.                              skk-henkan-end-point
  5254.                              cbuf )))
  5255.           (skk-move-overlay skk-henkan-overlay skk-henkan-start-point
  5256.                 skk-henkan-end-point cbuf )
  5257.           ;; evaporate $BB0@-$rIU$1$k$Y$-$+(B...$B!#$G$bJQ49$r7+$jJV$9$H$-$O!":FMxMQ(B
  5258.           ;; $B$9$k$N$@$+$i!"$`$7$m!"4{$K:n$C$F$"$kJ}$,NI$$$+$b!#(B
  5259.           (skk-overlay-put skk-henkan-overlay 'face skk-henkan-face) ))))
  5260.  
  5261. (defun skk-henkan-face-off ()
  5262.   ;; skk-henkan-start-point $B$H(B skk-henkan-end-point $B$N4V$NI=<($rJQ99$7$F$$$k(B
  5263.   ;; skk-henkan-overlay $B$r>C$9!#(B
  5264.   (and skk-henkan-face
  5265.        ;; $B%j%+!<%7%V%_%K%P%C%U%!$KF~$C$?$H$-$O!"(Boverlayp $B$K$h$k8!::$,I,MW!)(B
  5266.        (skk-overlayp skk-henkan-overlay)
  5267.        (skk-delete-overlay skk-henkan-overlay) ))
  5268.  
  5269. (defun skk-set-cursor-color (color)
  5270.   ;; $B%+!<%=%k$N?'$r(B COLOR $B$KJQ99$9$k!#(B
  5271.   (if skk-use-color-cursor
  5272.       (condition-case nil
  5273.       (set-cursor-color color)
  5274.     (error
  5275.      (set-cursor-color skk-default-cursor-color)
  5276.      (if skk-report-set-cursor-error
  5277.          (skk-message
  5278.               "$B%+%i!<%^%C%W@Z$l$G$9!#%G%#%U%)%k%H$N%+%i!<$r;H$$$^$9!#(B"
  5279.               "Color map is exhausting, use default cursor color" ))))))
  5280.  
  5281. ;;;###skk-autoload
  5282. (defun skk-set-cursor-properly ()
  5283.   ;; $B%+%l%s%H%P%C%U%!$N(B SKK $B$N%b!<%I$K=>$$!"%+!<%=%k$N?'$rJQ99$9$k!#(B
  5284.   (if skk-use-color-cursor
  5285.       (if (not skk-mode)
  5286.       (skk-set-cursor-color skk-default-cursor-color)
  5287.     (skk-set-cursor-color (cond (skk-zenkaku-mode skk-zenkaku-cursor-color)
  5288.                     (skk-katakana skk-katakana-cursor-color)
  5289.                     (skk-j-mode skk-hirakana-cursor-color)
  5290.                     (t skk-ascii-cursor-color) ))))
  5291.   (if skk-use-cursor-change
  5292.       (skk-change-cursor-when-ovwrt) ))
  5293.  
  5294. ;;;###skk-autoload
  5295. (defun skk-change-cursor-when-ovwrt ()
  5296.   (if skk-xemacs
  5297.       (setq bar-cursor overwrite-mode)
  5298.     (if overwrite-mode
  5299.         (modify-frame-parameters (selected-frame) '((cursor-type bar . 3)))
  5300.       (modify-frame-parameters (selected-frame) '((cursor-type . box))) )))
  5301.  
  5302. ;;;###skk-autoload
  5303. (defun skk-make-face (face)
  5304.   ;; hilit-lookup-face-create $B$N%5%V%;%C%H!#(Btutorial $B$G?'IU$1$r9T$J$&>l9g$G$b(B
  5305.   ;; hilit19 $B$K0MB8$;$:$H$j$"$($:(B face $B$r<+A0$G:n$k$3$H$,$G$-$k$h$&$K!"$H$$$&(B
  5306.   ;; $BL\E*$G:n$C$?$b$N$G!"4JC1$J?'IU$1$7$J$G$-$J$$!#$"$^$j8-$/$O$J$$!#J#;($J(B
  5307.   ;; face $B$r:n$j$?$$?M$O(B hilit-lookup-face-create $BEy$r;H$C$F2<$5$$!#(B
  5308.   (or (car (memq face (face-list)))
  5309.       (let ((face-name (symbol-name face))
  5310.             fore back )
  5311.         (setq face (make-face face))
  5312.         (save-match-data
  5313.           (if (not (string-match "/" face-name))
  5314.               (set-face-foreground face face-name)
  5315.             (set-face-foreground
  5316.              face
  5317.              (substring face-name 0 (match-beginning 0)) )
  5318.             (set-face-background
  5319.              face
  5320.              (substring face-name (1+ (match-beginning 0))) ))
  5321.           face ))))
  5322.                         
  5323. ;;(defun skk-reinvoke ()
  5324. ;;  (let ((original-status
  5325. ;;         (cond (skk-katakana 'katakana)
  5326. ;;               (skk-zenkaku-mode 'zenkaku)
  5327. ;;               (skk-j-mode 'hirakana)
  5328. ;;               (skk-mode 'ascii)
  5329. ;;               (t 'unkown) )))
  5330. ;;    (skk-mode 1)
  5331. ;;    (cond ((eq original-status 'katakana)
  5332. ;;           (setq skk-katakana t) )
  5333. ;;          ((eq original-status 'zenkaku)
  5334. ;;           (setq skk-zenkaku-mode t) )
  5335. ;;          ((eq original-status 'ascii)
  5336. ;;           (setq skk-j-mode nil) )
  5337. ;;          ((eq original-status 'hirakana)) )
  5338. ;;    (skk-kakutei) ))
  5339.  
  5340. (add-hook 'edit-picture-hook 'skk-misc-for-picture 'append)
  5341. (add-hook 'skk-before-kill-emacs-hook
  5342.           (function (lambda ()
  5343.                       (if skk-menu-modified-user-option
  5344.                           (skk-menu-save-modified-user-option) ))))
  5345. (add-hook 'after-make-frame-hook 'skk-set-cursor-properly)
  5346. (add-hook 'minibuffer-setup-hook
  5347.           (function (lambda () (skk-set-cursor-properly))) )
  5348.  
  5349. (add-hook 'minibuffer-exit-hook
  5350.           (function
  5351.            (lambda ()
  5352.              (remove-hook 'minibuffer-setup-hook 'skk-setup-minibuffer)
  5353.              (skk-set-cursor-properly) )))
  5354.  
  5355. (run-hooks 'skk-load-hook)
  5356.  
  5357. (provide 'skk)
  5358. ;;; skk.el ends here
  5359.